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