【Python】 使用pygame库实现新年烟花

祝大家金蛇衔财,蛇来运转

首先,确保你已经安装了 pygame 库。如果还没有安装,可以通过以下命令安装:

pip install pygame

接下来是烟花效果的 Python 代码:

import pygame
import random
import math
import sys

# 初始化pygame
pygame.init()

# 设置窗口尺寸和颜色
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("新年烟花")

# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
COLORS = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)]

# 烟花类
class Firework:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.size = random.randint(5, 8)
        self.color = random.choice(COLORS)
        self.particles = []
        self.exploded = False

    def update(self):
        if not self.exploded:
            self.y -= 5  # 向上飞
            if self.y < HEIGHT // 2:  # 达到爆炸高度
                self.explode()
        else:
            for particle in self.particles:
                particle.update()

    def draw(self):
        if not self.exploded:
            pygame.draw.circle(screen, self.color, (self.x, self.y), self.size)
        else:
            for particle in self.particles:
                particle.draw()

    def explode(self):
        self.exploded = True
        num_particles = random.randint(50, 100)
        for _ in range(num_particles):
            angle = random.uniform(0, 2 * math.pi)
            speed = random.uniform(2, 6)
            dx = math.cos(angle) * speed
            dy = math.sin(angle) * speed
            color = random.choice(COLORS)
            particle = Particle(self.x, self.y, dx, dy, color)
            self.particles.append(particle)

# 粒子类
class Particle:
    def __init__(self, x, y, dx, dy, color):
        self.x = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.color = color
        self.size = random.randint(2, 4)
        self.lifetime = random.randint(50, 100)

    def update(self):
        self.x += self.dx
        self.y += self.dy
        self.lifetime -= 1
        if self.lifetime <= 0:
            self.size -= 1
        if self.size <= 0:
            self.size = 0

    def draw(self):
        pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.size)

# 游戏主循环
def main():
    clock = pygame.time.Clock()
    fireworks = []
    running = True

    while running:
        screen.fill(BLACK)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        # 随机生成烟花
        if random.random() < 0.03:  # 3% 概率生成新烟花
            firework = Firework(random.randint(100, WIDTH - 100), HEIGHT)
            fireworks.append(firework)

        # 更新和绘制所有烟花
        for firework in fireworks[:]:
            firework.update()
            firework.draw()
            if firework.exploded and not firework.particles:  # 爆炸并且所有粒子消失后移除烟花
                fireworks.remove(firework)

        pygame.display.flip()
        clock.tick(60)  # 每秒60帧

    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()

代码解释

  1. 烟花类 (Firework)

    • 初始化时设定烟花的起始位置、大小、颜色等。
    • 当烟花飞到一定高度时,会调用 explode() 方法,生成多个粒子。
  2. 粒子类 (Particle)

    • 每个烟花爆炸后都会生成若干个粒子,每个粒子有方向、速度、颜色和生命周期等属性。
    • 粒子会随时间更新位置和大小。
  3. 主循环 (main())

    • 游戏窗口不断更新,生成新的烟花,并且更新已经存在的烟花的状态。
    • 使用 pygame.event.get() 处理退出事件。

运行效果

  • 烟花会从屏幕底部随机位置发射,飞到一定高度后爆炸,产生色彩斑斓的粒子效果,粒子逐渐消散。
  • 每隔一段时间,会有新的烟花生成,模拟一个持续的烟花秀。
相关推荐
我命由我123451 分钟前
游戏引擎 Unity - Unity 下载与安装
c语言·开发语言·c++·后端·unity·c#·游戏引擎
加德霍克21 分钟前
【机器学习】自定义数据集使用scikit-learn中的包实现线性回归方法对其进行拟合
python·机器学习·线性回归·scikit-learn·作业
wang_yb44 分钟前
『Python底层原理』--CPython如何编译代码
python·databook
Allen Bright1 小时前
Java动态代理:原理与实现
java·开发语言
weixin_404679311 小时前
指数分布推导
开发语言·c#
codingexpert4041 小时前
使用 Julia Distributions.jl 进行概率分布处理
开发语言·概率论·julia
九离十1 小时前
C语言教程——文件处理(2)
c语言·开发语言
假客套2 小时前
Java小白入门教程:两大类型的修饰符以及示例
java·开发语言
子非鱼9212 小时前
手写instanceof、手写new操作符
开发语言·javascript·原型模式
西猫雷婶2 小时前
python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配
人工智能·python·opencv·计算机视觉