使用pygame实现简单的烟花效果

import pygame
import sys
import random
import math# 初始化 Pygame
pygame.init()# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Fireworks Explosion")# 定义颜色
black = (0, 0, 0)
white = (255, 255, 255)# 定义烟花粒子类
class Particle:def __init__(self, x, y, color):self.x = xself.y = yself.color = colorself.radius = 2self.angle = random.uniform(0, 2 * math.pi)self.speed = random.uniform(2, 5)def move(self):self.x += self.speed * math.cos(self.angle)self.y -= self.speed * math.sin(self.angle)  # 注意这里是减去,让粒子往上运动def create_firework_explosion():explosion_color = random.choice(colors)x = width // 2  # 将烟花放在屏幕中央的水平位置y = height // 2  # 将烟花放在屏幕中央的垂直位置for _ in range(100):particles.append(Particle(x, y, explosion_color))# 主循环
particles = []
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)]
clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 产生新的烟花爆炸if random.random() < 0.02:create_firework_explosion()# 更新烟花粒子位置for particle in particles:particle.move()# 绘制烟花粒子screen.fill(black)for particle in particles:pygame.draw.circle(screen, particle.color, (int(particle.x), int(particle.y)), particle.radius)# 移除离开屏幕的烟花粒子particles = [particle for particle in particles if 0 <= particle.x <= width and 0 <= particle.y <= height]pygame.display.flip()clock.tick(60)

代码的主要结构和功能总结:

1.初始化 Pygame 和设置窗口:

  • 使用 Pygame 初始化,并设置窗口大小为 800x600 像素。
  • 创建一个窗口对象并设置窗口标题为 "Fireworks Explosion"。

2.定义颜色和烟花粒子类:

  • 定义黑色(背景)和白色的颜色常量。
  • 创建一个 Particle 类,表示烟花粒子,包含位置 (x, y)、颜色、半径、角度和速度等属性。该类有一个 move 方法,用于更新粒子的位置。

3.定义烟花爆炸函数:

  • create_firework_explosion 函数创建一个新的烟花爆炸。在该函数中,初始位置 (x, y) 被设置为屏幕的中央,然后产生一组颜色随机的粒子。

4.主循环:

  • 进入 Pygame 的主循环,监听退出事件。
  • 在每次迭代中,检查是否触发了新的烟花爆炸。
  • 更新烟花粒子的位置,绘制粒子,并在屏幕上移除离开屏幕的粒子。
  • 刷新屏幕,并限制帧速率为 60 帧每秒。

这个简单的烟花效果通过粒子系统模拟烟花的爆炸过程,而烟花则在屏幕中央绽放。

可以通过调整粒子的数量、速度、颜色等参数,以及添加更多的烟花效果来定制这个基础实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM框架实现在线作业管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现在线作业管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需求…

【DIY summaries on Linux】

DIY Linux summaries 1) difference between ways of creation file and edit files1.1) echoecho talk to yourself touch 1) difference between ways of creation file and edit files 1.1) echo ###) > echo talk to yourself touch

数据治理工程师CDGA数据架构

1. 企业架构不包括哪项&#xff1f;&#xff08;C &#xff09; A 业务架构 B 数据架构 C 系统架构 D 技术架构 2. 关于架构设计生命周期描述错误的是&#xff1f;( D ) A 可以是针对当前的 B 可以是面向未来的 C 可以是已实施完成的 D 可以是已经退役 10 年的 3. 关于企业数据…

IPv6组播--SSM Mapping

概念 SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。 如果成员主机上运行MLDv2,可以在MLDv2报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行MLDv1,为了使其也能够使用SSM服务,组播路由器上需要提…

k8s-数据卷

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;delete&#xff0c;k8s用控制创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会恢复到初识状态 一旦容器回到初始状态&#xff0c;所有得分后天编辑的文件…

粒子群算法优化RBF神经网络回归分析

目录 完整代码和数据下载链接:粒子群算法优化RBF神经网络回归分析(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738570 RBF的详细原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,基于rbf的空调功率预测 代码 结果分析 展望…

通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

原创/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的&#xff0c;毕竟&#xff0c;纸上得来终觉浅&#xff0c;绝知此事要躬行。 一、域名与IP地址 当在浏览器上敲下“www.baidu.com”时&#xff0c;一键回车&#xff0c;很快&#x…

Linux远程登陆协议ssh

目录 一、SSH服务 1. ssh基础 2. 原理 3. 服务端配置 3.1 常用配置项 3.2 具体操作 3.2.1 修改默认端口号 3.2.2 禁止root用户登录 3.2.3 白名单列表 3.2.4 黑名单列表 3.2.5 使用秘钥对及免交互验证登录 3.2.6 免交互式登录 一、SSH服务 1. ssh基础 SSH&…

VQE音频处理流程

VQE 上行VQE&#xff0c;主要针对MIC采集部分的音频增强 下行VQE&#xff0c;主要针对SPK播放部分的音频增强 附关键词解释 RES RES 模块为重采样&#xff08;Resampler&#xff09;模块。当AI上行或AO下行通路中开启VQE 各功能 模块时&#xff0c;在处理前后各存在一次重采样…

c语言实现b树

概述&#xff1a;B 树&#xff08;B-tree&#xff09;是一种自平衡的搜索树数据结构&#xff0c;广泛应用于数据库和文件系统等领域。它的设计旨在提供一种高效的插入、删除和查找操作&#xff0c;同时保持树的平衡&#xff0c;确保各个节点的深度相差不大。 B 树的特点包括&a…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代&#xff0c;爬虫技术被广泛应用于数据采集和处理。然而&#xff0c;在使用爬虫技术的过程中&#xff0c;经常会遇到IP被封禁的问题&#xff0c;这给数据采集工作带来了很大的困扰。因此&#xff0c;使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

Java中泛型和Object类型 初级进阶教程(一)

在学习的过程中&#xff0c;常常看到某个类或者接口等中使用 List<T>, Test<T>&#xff0c;其中<T>的作用是什么呢&#xff1f; 1 在类中使用泛型 public class Box<T> {private T content;public void setContent(T content) {this.content conten…

深度学习与药物发现在健康衰老中的应用

深度学习是一种模拟人脑神经网络处理信息的方法&#xff0c;其已在语音、图像、自然语言等处理中发挥了巨大作用。但在健康衰老这一领域的应用中&#xff0c;它面临着很多挑战。 首先&#xff0c;健康衰老是一个复杂的生物学过程&#xff0c;涉及众多因素&#xff0c;如基因、…

Linux———top命令详解(狠狠爱住)

top 命令 是一个常用的系统性能监测工具&#xff0c;它可以实时显示系统中各个进程的状态和资源占用情况。 启动 top 命令&#xff1a; 直接在终端输入 top 命令即可启动。默认情况下&#xff0c;top 显示的是按照 CPU 使用率排序的进程列表。 功能键说明&#xff1a; h&…

【redis基础1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

文章测试测试

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

xtu oj 1340 wave

题目描述 一个n列的网格&#xff0c;从(0,0)网格点出发&#xff0c;波形存在平波(从(x,y)到(x1,y))&#xff0c;上升波(从(x,y)到(x1,y1))&#xff0c;下降波(从(x,y)到(x1,y−1))三种波形&#xff0c;请问从(0,0)出发&#xff0c;最终到达(n,0)的不同波形有多少种&#xff1f…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业&#xff0c;我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言&#xff0c;C和Pyhont。C# 有大佬做了对应的Open…

快速幂板子

快速幂是快速算 a 的 c 次幂 原理&#xff1a; 我们用分治思想是比一个一个乘快的 即比如我们求a的8次方 &#xff1a;a1*a1 a2 ,那么我们直接a2*a2 a4&#xff0c;a4*a4 a8 参数就是几次幂。返回值是对应参数的幂 &#xff08;这里对p取余了&#xff09;(一般也把a当参数…

vue 自定义网页图标 favicon.ico 和 网页标题

效果预览 1. 添加配置 vue.config.js 在 module.exports { 内添加 // 自定义网页图标pwa: {iconPaths: {favicon32: "./favicon.ico",favicon16: "./favicon.ico",appleTouchIcon: "./favicon.ico",maskIcon: "./favicon.ico",msTil…