使用pygame实现简单的烟花效果

发布时间:2024年01月14日
import pygame
import sys
import random
import math

# 初始化 Pygame
pygame.init()

# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Fireworks Explosion")

# 定义颜色
black = (0, 0, 0)
white = (255, 255, 255)

# 定义烟花粒子类
class Particle:
    def __init__(self, x, y, color):
        self.x = x
        self.y = y
        self.color = color
        self.radius = 2
        self.angle = random.uniform(0, 2 * math.pi)
        self.speed = random.uniform(2, 5)

    def move(self):
        self.x += self.speed * math.cos(self.angle)
        self.y -= self.speed * math.sin(self.angle)  # 注意这里是减去,让粒子往上运动

def create_firework_explosion():
    explosion_color = random.choice(colors)
    x = width // 2  # 将烟花放在屏幕中央的水平位置
    y = height // 2  # 将烟花放在屏幕中央的垂直位置
    for _ in range(100):
        particles.append(Particle(x, y, explosion_color))

# 主循环
particles = []
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255)]
clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 产生新的烟花爆炸
    if random.random() < 0.02:
        create_firework_explosion()

    # 更新烟花粒子位置
    for particle in particles:
        particle.move()

    # 绘制烟花粒子
    screen.fill(black)
    for particle in particles:
        pygame.draw.circle(screen, particle.color, (int(particle.x), int(particle.y)), particle.radius)

    # 移除离开屏幕的烟花粒子
    particles = [particle for particle in particles if 0 <= particle.x <= width and 0 <= particle.y <= height]

    pygame.display.flip()
    clock.tick(60)

代码的主要结构和功能总结:

1.初始化 Pygame 和设置窗口:

  • 使用 Pygame 初始化,并设置窗口大小为 800x600 像素。
  • 创建一个窗口对象并设置窗口标题为 "Fireworks Explosion"。

2.定义颜色和烟花粒子类:

  • 定义黑色(背景)和白色的颜色常量。
  • 创建一个 Particle 类,表示烟花粒子,包含位置 (x, y)、颜色、半径、角度和速度等属性。该类有一个 move 方法,用于更新粒子的位置。

3.定义烟花爆炸函数:

  • create_firework_explosion 函数创建一个新的烟花爆炸。在该函数中,初始位置 (x, y) 被设置为屏幕的中央,然后产生一组颜色随机的粒子。

4.主循环:

  • 进入 Pygame 的主循环,监听退出事件。
  • 在每次迭代中,检查是否触发了新的烟花爆炸。
  • 更新烟花粒子的位置,绘制粒子,并在屏幕上移除离开屏幕的粒子。
  • 刷新屏幕,并限制帧速率为 60 帧每秒。

这个简单的烟花效果通过粒子系统模拟烟花的爆炸过程,而烟花则在屏幕中央绽放。

可以通过调整粒子的数量、速度、颜色等参数,以及添加更多的烟花效果来定制这个基础实现。

文章来源:https://blog.csdn.net/m0_62110645/article/details/135589654
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。