当前位置: 首页 > news >正文

使用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.lryc.cn/news/280607.html

相关文章:

  • ubantu系统运维命令,端口相关操作
  • Java中的Stream API进阶使用
  • R语言【paleobioDB】——pbdb_collection():从PBDB获取单个采集号的基本信息
  • 阿里云服务器的tcp端口无法访问(云服务厂家问题?)
  • BikeDNA(九) 特征匹配
  • vuex是什么?怎么使用?哪种功能场景使用它?
  • 求斐波那契数列矩阵乘法的方法
  • 【IPC通信--消息队列】
  • 读写分离的手段——主从复制,解决读流量大大高于写流量的问题
  • Day02
  • 编程语言的发展未来?
  • docsify阿里云上部署
  • GPT实战系列-简单聊聊LangChain搭建本地知识库准备
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • opencv多张图片实现全景拼接
  • 深入理解UML中的继承关系
  • CMU15-445-Spring-2023-Project #2 - B+Tree
  • matplotlib:热图、箱形图、小提琴图、堆叠面积图、雷达图、子图
  • Django数据库选移的preserve_default=False是什么意思?
  • 逸学Docker【java工程师基础】2.Docker镜像容器基本操作+安装MySQL镜像运行
  • 基于Java SSM框架实现医院管理系统项目【项目源码】计算机毕业设计
  • 【java八股文】之Spring系列篇
  • 关于MySQL源码的学习 这里是一些建议
  • Mysql是怎样运行的--下
  • yum来安装php727
  • 基于jackson封装的json字符串与javaBean对象转换工具
  • js中的数据类型
  • vue3+vant+cropper.js实现移动端图片裁剪功能
  • springCould中的Bus-从小白开始【11】
  • xshell和xftp