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 帧每秒。
这个简单的烟花效果通过粒子系统模拟烟花的爆炸过程,而烟花则在屏幕中央绽放。
可以通过调整粒子的数量、速度、颜色等参数,以及添加更多的烟花效果来定制这个基础实现。