当前位置: 首页 > article >正文

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

运行效果

  • 烟花会从屏幕底部随机位置发射,飞到一定高度后爆炸,产生色彩斑斓的粒子效果,粒子逐渐消散。
  • 每隔一段时间,会有新的烟花生成,模拟一个持续的烟花秀。

http://www.kler.cn/a/523936.html

相关文章:

  • Rust:Rhai脚本编程示例
  • 【C++ 真题】P1706 全排列问题
  • 联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署
  • 小程序-视图与逻辑
  • doris:Bitmap
  • CAPL编程常见问题与解决方案深度解析
  • 支持selenium的chrome driver更新到132.0.6834.110
  • 彻底理解Flink的多种部署方式
  • 人工智能丨基于机器学习的视觉 CV 处理技术
  • 开发第一个安卓页面
  • 长尾关键词优化对提升SEO和网站访客流量的实用影响与策略
  • C语言深入解析 printf的底层源码实现
  • 【前端】Hexo 部署指南_hexo-deploy-git·GitHub Actions·Git Hooks
  • 接口 V2 完善:分布式环境下的 WebSocket 实现与 Token 校验
  • docker desktop使用ollama在GPU上运行deepseek r1大模型
  • ACL-2024 | 具身智能空间理解能力几何?EmbSpatial-Bench:视觉语言大模型在具身任务中空间理解水平测试基准
  • 如何获取svg图标中的路径 (漫反射图标效果实现)
  • 算法随笔_29:最大宽度坡_方法3
  • 澳洲硕士毕业论文写作中如何把握主题
  • 笔记本跑大模型尝试
  • 奖励模型:解析大语言模型的关键工具
  • 作業系統:設計與實現-母本
  • 密码学的数学基础1-整数 素数 和 RSA加密
  • vim交换文件的作用
  • 关于2024年
  • 2024年12月GESP C++ 二级考级真题—寻找数字