
技术需求
- Pygame 库:用于创建图形界面、绘制图形、处理用户输入和管理时间。通过
pg.init() 初始化,pg.display.set_mode() 创建屏幕。
- 随机数生成:使用
random 库控制烟花和粒子的颜色、速度、方向等,模拟自然效果。
- 物理模拟:利用
Vector2 类表示坐标和速度,模拟重力及粒子运动轨迹。
- 粒子系统:烟花爆炸生成多个粒子对象,包含颜色、大小、速度和生命周期。
- 路径追踪(Trail):记录粒子位置生成尾迹,颜色和大小随时间变化。
- 图形渲染:使用
pg.draw.circle() 和 screen.blit() 绘制元素,screen.fill() 清除背景。
- 动态文本渲染:使用
pg.font.SysFont() 渲染节日祝福文本。
- 事件处理和程序控制:监听关闭窗口事件,通过主循环控制帧率。
- 对象导向编程:定义
Firework、Particle 和 Trail 类封装行为。
完整代码
import pygame as pg
import random as ra
import math
pg.init()
pg.display.set_caption("🎇")
winScreen = pg.display.Info()
screenWidth = winScreen.current_w
screenHeight = winScreen.current_h
vector = pg.math.Vector2
trail_colors = [(45, 45, 45), (60, 60, 60), (75, 75, 75), (125, 125, 125), (150, 150, 150)]
class Firework:
():
.colour = (ra.randint(, ), ra.randint(, ), ra.randint(, ))
.colours = (
(ra.randint(, ), ra.randint(, ), ra.randint(, )),
(ra.randint(, ), ra.randint(, ), ra.randint(, )),
(ra.randint(, ), ra.randint(, ), ra.randint(, ))
)
.firework = Particle(ra.randint(, screenWidth), screenHeight, , .colour)
.exploded =
.particles = []
.min_max_particles = vector(, )
():
g = vector(, ra.uniform(, ))
.exploded:
.firework.apply_force(g)
.firework.move()
tf .firework.trails:
tf.show(win)
.show(win)
.firework.vel.y >= :
.exploded =
.explode()
:
particle .particles:
particle.apply_force(vector(g.x + ra.uniform(-, ) / , g.y / + (ra.randint(, ) / )))
particle.move()
t particle.trails:
t.show(win)
particle.show(win)
():
amount = ra.randint((.min_max_particles.x), (.min_max_particles.y))
i (amount):
.particles.append(Particle(.firework.pos.x, .firework.pos.y, , .colours))
():
pg.draw.circle(win, .colour, ((.firework.pos.x), (.firework.pos.y)), .firework.size)
():
.exploded:
p .particles:
p.remove :
.particles.remove(p)
(.particles) == :
……