【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() 处理退出事件。

运行效果

  • 烟花会从屏幕底部随机位置发射,飞到一定高度后爆炸,产生色彩斑斓的粒子效果,粒子逐渐消散。
  • 每隔一段时间,会有新的烟花生成,模拟一个持续的烟花秀。
相关推荐
傻啦嘿哟3 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670793 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
2601_962077604 小时前
python Dejavu库快速识别音频指纹实例探究
python·音乐识别·dejavu库·音频指纹识别·实例探究
科技苑4 小时前
如何用Python编程实现一个简单的Web爬虫?
人工智能·python
李少兄4 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
dayDayupbetter4 小时前
Visual C++ 2010安装与使用高手秘籍
python
隐擎fox5 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
医疗信息化王工5 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
Seoyoneh5 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei5 小时前
Java 写 Agent:模型只是组件
java·开发语言