返回

用Pygame打造令人惊叹的烟花 spettacolo

后端

用Pygame点燃夜空

烟花,那些在漆黑的夜空中绽放的刹那间美丽,一直是节日庆祝和特殊场合的标志。想象一下用代码重现这种壮观,用Pygame为您的屏幕带来令人惊叹的雪夜烟花 spettacolo。

准备工作

要踏上这场编程之旅,您需要:

  • Python(推荐3.10或更高版本)
  • Pygame(推荐2.1.2或更高版本)
  • 一些编程基础和对图形界面概念的理解

搭建画布

首先,让我们用Pygame创建一个画布来展示我们的烟花表演。这就像搭建一个虚拟舞台,为我们的视觉奇观做准备。

import pygame

# 初始化 Pygame
pygame.init()

# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# 设置背景颜色
screen.fill((0, 0, 0))  # 黑色

点亮夜空

现在,让我们进入烟花表演的精髓:创建烟花本身。每个烟花都是一个由粒子组成的系统,这些粒子沿着轨迹运动,在到达顶点后爆炸成五颜六色的光彩。

# 创建一个粒子类
class Particle:
    def __init__(self, pos, vel, radius, color):
        self.pos = pos  # 粒子的位置
        self.vel = vel  # 粒子的速度
        self.radius = radius  # 粒子的半径
        self.color = color  # 粒子的颜色

    def update(self):
        # 更新粒子的位置
        self.pos += self.vel

    def draw(self, screen):
        # 绘制粒子
        pygame.draw.circle(screen, self.color, self.pos, self.radius)

有了粒子,我们就可以创建烟花并使其在屏幕上爆炸。

# 创建一个烟花类
class Firework:
    def __init__(self, pos, color):
        self.pos = pos  # 烟花发射的位置
        self.color = color  # 烟花的颜色
        self.particles = []  # 烟花的粒子列表

    def explode(self):
        # 创建烟花的粒子
        for i in range(100):
            # 随机生成粒子的速度和角度
            angle = random.uniform(0, 2 * math.pi)
            speed = random.uniform(5, 10)
            vel = (speed * math.cos(angle), speed * math.sin(angle))

            # 创建一个粒子并将其添加到粒子列表中
            self.particles.append(Particle(self.pos, vel, 2, self.color))

    def update(self):
        # 更新烟花的粒子
        for particle in self.particles:
            particle.update()

    def draw(self, screen):
        # 绘制烟花的粒子
        for particle in self.particles:
            particle.draw(screen)

下雪了!

为了让我们的雪夜烟花场景更加逼真,让我们添加一些飘落的雪花。

# 创建一个雪花类
class Snowflake:
    def __init__(self, pos, vel):
        self.pos = pos  # 雪花的初始位置
        self.vel = vel  # 雪花的初始速度

    def update(self):
        # 更新雪花的位置
        self.pos += self.vel

    def draw(self, screen):
        # 绘制雪花
        pygame.draw.circle(screen, (255, 255, 255), self.pos, 2)

创建交互

通过鼠标单击来发射烟花,让我们的烟花表演变得更具互动性。

# 主循环
running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            # 在鼠标点击的位置创建一个烟花
            firework = Firework(event.pos, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
            firework.explode()

    # 更新和绘制雪花
    for snowflake in snowflakes:
        snowflake.update()
        snowflake.draw(screen)

    # 更新和绘制烟花
    for firework in fireworks:
        firework.update()
        firework.draw(screen)

    # 更新显示
    pygame.display.update()

庆祝时刻

现在,当您运行程序时,您将看到一场令人惊叹的雪夜烟花表演,点亮您的屏幕,庆祝节日或任何特殊场合。您可以通过调整代码中的参数来定制烟花的效果,例如粒子数量、速度和颜色。