Python新春烟花
系列文章
序号 | 直达链接 |
---|---|
Tkinter | |
1 | Python李峋同款可写字版跳动的爱心 |
2 | Python跳动的双爱心 |
3 | Python蓝色跳动的爱心 |
4 | Python动漫烟花 |
5 | Python粒子烟花 |
Turtle | |
1 | Python满屏飘字 |
2 | Python蓝色流星雨 |
3 | Python金色流星雨 |
4 | Python漂浮爱心 |
5 | Python爱心光波① |
6 | Python爱心光波② |
7 | Python满天繁星 |
8 | Python五彩气球 |
9 | Python白色飘雪 |
10 | Python七彩花朵 |
11 | Python 3D星空 |
12 | Python大雪纷飞 |
13 | Python一闪一闪亮星星 |
14 | Python爱心泡泡 |
15 | Python爱心射线 |
16 | Python圣诞礼物 |
17 | Python礼物圣诞树 |
18 | Python浪漫星空 |
19 | Python飞舞蝙蝠 |
20 | Python万圣礼物 |
21 | Python蓝色飘雪 |
Pygame | |
1 | Python跨年烟花 |
2 | Python炫酷烟花 |
3 | Python黑客帝国字母雨 |
敬请期待…… |
写在前面
Python实现炫酷新春烟花动画的完整代码。
技术需求
-
Pygame库
- Pygame 是一款专为游戏开发设计的Python库,提供图形渲染、事件管理、音频播放等核心功能。在本代码中,Pygame负责创建窗口、处理用户交互、绘制粒子、烟花及文字等元素。
-
粒子系统
- 粒子系统 是一种用于模拟物理现象的技术,常用于实现爆炸、烟雾、火焰等视觉效果。在此段代码中,粒子系统被用来模拟烟花爆炸的效果。每个粒子具备位置、速度和生命周期等属性,并受重力影响,逼真地再现烟花爆炸后的飞散场景。
-
物理模拟
- 在代码中,通过在
update()
方法中调整垂直速度vy
来模拟重力对粒子的影响,使粒子逐渐加速下落,模仿现实生活中烟花爆炸后物体的运动轨迹。
- 在代码中,通过在
-
随机数生成
- 随机数生成 用于控制烟花的颜色、发射角度、速度和生命周期等参数。每当生成新的烟花时,程序会随机选择颜色、粒子数量和角度等,确保每次烟花展示都是独一无二的。
-
图形绘制
- 利用
pygame.draw.circle()
函数绘制粒子和文字,生动展现烟花动态效果及“Happy New Year!”的祝福语。pygame.font.SysFont()
用于加载系统字体并绘制文本内容。
- 利用
-
事件处理
- 通过
pygame.event.get()
捕获并处理用户事件,如关闭窗口等操作,使程序能够响应用户输入,增强应用的交互体验。
- 通过
-
动画控制
- 使用 帧率控制(通过
clock.tick(FPS)
)确保动画流畅运行,并借助time.sleep(0.05)
调整每帧更新速率,使烟花效果更加清晰呈现。
- 使用 帧率控制(通过
-
面向对象编程(OOP)
- 定义
Particle
和Firework
类,采用面向对象编程理念,将粒子和烟花的行为封装于不同类中,提升代码结构化程度,便于维护与扩展。
- 定义
完整代码
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 = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speeddef update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05 # Gravity effectdef 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 = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.particles = []self.exploded = Falsedef 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 = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speed
update()
方法更新粒子位置,考虑重力影响:
def update(self):self.x += self.vxself.y += self.vyself.life -= 1self.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 = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.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实现了生动的烟花效果,利用粒子系统模拟烟花爆炸后的动态行为,结合随机化技术确保每次爆炸的独特性。此外,主循环实时更新烟花状态并展示祝福文字,营造出浓厚的节日氛围。
写在后面
我是一只有趣的兔子,感谢你的喜欢!