Python新春烟花

发布于:2025-06-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

fireworks

系列文章

写在前面

Python实现炫酷新春烟花动画的完整代码。

技术需求

  1. Pygame库

    • Pygame 是一款专为游戏开发设计的Python库,提供图形渲染、事件管理、音频播放等核心功能。在本代码中,Pygame负责创建窗口、处理用户交互、绘制粒子、烟花及文字等元素。
  2. 粒子系统

    • 粒子系统 是一种用于模拟物理现象的技术,常用于实现爆炸、烟雾、火焰等视觉效果。在此段代码中,粒子系统被用来模拟烟花爆炸的效果。每个粒子具备位置、速度和生命周期等属性,并受重力影响,逼真地再现烟花爆炸后的飞散场景。
  3. 物理模拟

    • 在代码中,通过在 update() 方法中调整垂直速度 vy 来模拟重力对粒子的影响,使粒子逐渐加速下落,模仿现实生活中烟花爆炸后物体的运动轨迹。
  4. 随机数生成

    • 随机数生成 用于控制烟花的颜色、发射角度、速度和生命周期等参数。每当生成新的烟花时,程序会随机选择颜色、粒子数量和角度等,确保每次烟花展示都是独一无二的。
  5. 图形绘制

    • 利用 pygame.draw.circle() 函数绘制粒子和文字,生动展现烟花动态效果及“Happy New Year!”的祝福语。pygame.font.SysFont() 用于加载系统字体并绘制文本内容。
  6. 事件处理

    • 通过 pygame.event.get() 捕获并处理用户事件,如关闭窗口等操作,使程序能够响应用户输入,增强应用的交互体验。
  7. 动画控制

    • 使用 帧率控制(通过 clock.tick(FPS))确保动画流畅运行,并借助 time.sleep(0.05) 调整每帧更新速率,使烟花效果更加清晰呈现。
  8. 面向对象编程(OOP)

    • 定义 ParticleFirework 类,采用面向对象编程理念,将粒子和烟花的行为封装于不同类中,提升代码结构化程度,便于维护与扩展。

完整代码

import pygame
import random
import math
import time

# Initialize Pygame
pygame.init()

# Constants
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # Black
FPS = 60

# Screen setup
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')

# Font setup using system default font
font = pygame.font.SysFont("Comic Sans MS", 100)  # You can replace "Arial" with any system font
text_color = (255, 255, 255)  # White color for the text

# Particle class
class Particle:
    def __init__(self, x, y, color, angle, speed, life):
        self.x = x
        self.y = y
        self.color = color
        self.angle = angle
        self.speed = speed
        self.life = life
        self.radius = 2
        self.vx = math.cos(angle) * speed
        self.vy = math.sin(angle) * speed

    def update(self):
        self.x += self.vx
        self.y += self.vy
        self.life -= 1
        self.vy += 0.05  # Gravity effect

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


# Firework class
class Firework:
    def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):
        self.x = x
        self.y = y
        self.color = color
        self.num_particles = num_particles
        self.spread = spread
        self.particles = []
        self.exploded = False

    def explode(self):
        if not self.exploded:
            for _ in range(self.num_particles):
                angle = random.uniform(0, self.spread)
                speed = random.uniform(1, 3)
                life = random.randint(30, 50)
                particle = Particle(self.x, self.y, self.color, angle, speed, life)
                self.particles.append(particle)
            self.exploded = True
……

代码分析

这段代码运用Python的Pygame库,精心设计了一个动态的新春烟花展示效果。程序不仅模拟了烟花的发射、爆炸及粒子运动,还在屏幕中央呈现了“Happy New Year!”的温馨祝福。接下来,我们将从程序结构、核心功能、代码实现和细节等方面进行深入解析。

1. 程序结构

该程序由几个关键部分构成:

  • Pygame初始化与常量定义: 初始化Pygame库,并设定屏幕尺寸、背景色、帧率等基础参数。
  • Particle类: 定义烟花中粒子的行为特性,包括位置、速度和生命周期等。
  • Firework类: 负责烟花的爆炸效果及粒子生成与更新。
  • 主循环(main函数): 处理游戏事件、更新画面、控制烟花发射和文字显示。

2. Pygame初始化

pygame.init()

此行代码启动Pygame库,使程序能够利用其绘图、音效处理和事件管理等功能。

3. 常量与屏幕配置

SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # 黑色背景
FPS = 60

这里定义了窗口尺寸、背景颜色和帧率等常量,为程序的整体布局和动画流畅性奠定基础。

创建并设置Pygame窗口:

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')

pygame.display.set_mode()创建指定尺寸的屏幕,pygame.display.set_caption()则将窗口标题设为“新春烟花”。

4. 字体配置

font = pygame.font.SysFont("Comic Sans MS", 100)
text_color = (255, 255, 255)  # 白色文字

通过pygame.font.SysFont()选择“Comic Sans MS”字体,字号设为100,用于渲染屏幕上的祝福文字,文字颜色为白色。

5. Particle类

Particle类描述烟花中的单个粒子,包含位置、颜色、速度、角度和生命周期等属性。

class Particle:
    def __init__(self, x, y, color, angle, speed, life):
        self.x = x
        self.y = y
        self.color = color
        self.angle = angle
        self.speed = speed
        self.life = life
        self.radius = 2
        self.vx = math.cos(angle) * speed
        self.vy = math.sin(angle) * speed

update()方法更新粒子位置,考虑重力影响:

def update(self):
    self.x += self.vx
    self.y += self.vy
    self.life -= 1
    self.vy += 0.05  # 模拟重力

draw()方法绘制粒子:

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

6. Firework类

Firework类模拟烟花爆炸过程及粒子管理。

class Firework:
    def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):
        self.x = x
        self.y = y
        self.color = color
        self.num_particles = num_particles
        self.spread = spread
        self.particles = []
        self.exploded = False

explode()方法生成爆炸时的粒子:

def explode(self):
    if not self.exploded:
        for _ in range(self.num_particles):
            angle = random.uniform(0, self.spread)
            speed = random.uniform(1, 3)
            life = random.randint(30, 50)
            particle = Particle(self.x, self.y, self.color, angle, speed, life)
            self.particles.append(particle)
        self.exploded = True

update()方法更新粒子状态并检查是否已爆炸:

def update(self):
    if not self.exploded:
        self.explode()
    for particle in self.particles:
        particle.update()

draw()方法绘制所有粒子:

def draw(self):
    for particle in self.particles:
        if particle.life > 0:
            particle.draw()

7. 主循环

主循环是程序的核心,负责事件处理、烟花发射、状态更新和文字显示。

  • 事件处理: 检查退出事件。
  • 烟花发射: 随机决定是否发射新烟花。
  • 更新与绘制烟花: 更新烟花状态并绘制。
  • 文字显示: 屏幕中央显示祝福文字。

8. 总结

此代码通过Pygame实现了生动的烟花效果,利用粒子系统模拟烟花爆炸后的动态行为,结合随机化技术确保每次爆炸的独特性。此外,主循环实时更新烟花状态并展示祝福文字,营造出浓厚的节日氛围。

写在后面

我是一只有趣的兔子,感谢你的喜欢!


网站公告

今日签到

点亮在社区的每一天
去签到