Python跨年烟花
系列文章
序号 | 直达链接 |
炫酷系列 | |
1 | Python制作一个无法拒绝的表白界面 |
2 | Python满屏飘字表白代码 |
3 | Python无限弹窗满屏表白代码 |
4 | Python李峋同款可写字版跳动的爱心 |
5 | Python流星雨代码 |
6 | Python漂浮爱心代码 |
7 | Python爱心光波代码 |
8 | Python普通的玫瑰花代码 |
9 | Python炫酷的玫瑰花代码 |
10 | Python多彩的玫瑰花代码 |
节日系列 | |
1 | Python动漫风烟花秀代码 |
2 | Python新年烟花秀代码 |
3 | Python圣诞礼物代码 |
4 | Python画圣诞树代码 |
5 | Python可爱版圣诞树丨绿色 |
6 | Python可爱版圣诞树丨粉色 |
7 | Python大雪纷飞代码 |
8 | Python生日蛋糕代码 |
9 | Python五彩气球代码 |
10 | Python国庆祝福代码 |
11 | Python万圣礼物代码 |
12 | Python愚人节礼物代码 |
13 | Python浪漫星空代码 |
14 | Python樱花树代码 |
动漫系列 | |
1 | Python名侦探柯南 |
2 | Python喜羊羊 |
3 | Python懒羊羊 |
4 | Python灰太狼 |
5 | Python小灰灰 |
6 | Python小香香 |
7 | Python沸羊羊 |
8 | Python海绵宝宝 |
9 | Python哆啦A梦 |
10 | Python凯蒂猫 |
11 | Python汤姆与杰瑞 |
12 | Python草莓熊 |
13 | Python迷你皮卡丘 |
14 | Python高级皮卡丘 |
15 | Python豪华皮卡丘 |
16 | Python史迪仔 |
17 | Python小熊猫 |
18 | Python蜘蛛侠 |
19 | Python可爱版蜡笔小新 |
20 | Python萌萌的蜡笔小新 |
炫酷系列 | |
1 | Python张万森下雪了 |
2 | Python一闪一闪亮晶晶 |
3 | Python黑客帝国代码雨 |
4 | Python七彩花朵 |
5 | Python模拟3D星空 |
6 | Python金榜题名 |
7 | Python满天星 |
文章目录
写在前面
Python实现炫酷烟花秀的动画效果。
技术需求
- Pygame基础技术
pygame.display.set_mode
创建窗口,pygame.display.set_caption
设置标题,screen.fill
刷新背景。pygame.event.get
捕获用户事件,如退出 (pygame.QUIT
) 和按键 (pygame.KEYDOWN
)。pygame.time.Clock
设置帧率,保持动画流畅运行。- 随机化与动态效果
random.randint
和 random.uniform
随机生成烟花的颜色、初始位置、目标高度、上升速度和爆炸半径,增加多样性。self.y
) 和爆炸半径 (self.explode_radius
)。- 数学与几何计算
math.radians
将角度转为弧度,结合 math.cos
和 math.sin
计算爆炸粒子的散射方向。- 面向对象编程
Firework
类封装烟花的属性和行为(如运动、绘制和重置),结构清晰、易扩展。- 循环与动画更新
self.exploded
) 控制烟花的不同阶段(上升和爆炸)。- 颜色渐变
完整代码
import pygame
import random
import math
# 初始化 Pygame
pygame.init()
# 定义窗口大小
WIDTH, HEIGHT = 1520, 760 # 设置为全屏分辨率
screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 移除全屏,保留窗口模式
pygame.display.set_caption("炫酷烟花")
# 定义颜色
BLACK = (0, 0, 0)
# 烟花类
class Firework:
def __init__(self):
self.x = random.randint(0, WIDTH)
self.y = HEIGHT + random.randint(50, 250)
self.end_y = random.randint(0, HEIGHT)
self.radius = random.randint(120, 170)
self.explode_radius = 0
self.color = random.choice([
(255, 0, 0), (210, 190, 255), (255, 120, 0),
(255, 0, 150), (255, 240, 100), (10, 255, 255),
(160, 10, 255), (255, 200, 60)
])
self.exploded = False
self.speed = random.uniform(2, 5) # 随机上升速度
……
代码分析
这段代码使用了Pygame库,创建了一个模拟烟花的动画程序,以下是对代码的详细分析。
1. 代码结构概览
该程序通过Pygame实现了以下功能:
主要包括以下模块:
- 窗口初始化:设置窗口大小、标题和背景颜色。
- 烟花类定义:描述烟花的属性和行为,包括运动逻辑、绘制和重置。
- 主循环:控制程序运行,负责事件处理、动画更新和绘制。
2. 代码分析
(1)Pygame初始化
pygame.init()
WIDTH, HEIGHT = 1520, 760
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("炫酷烟花")
pygame.init()
初始化Pygame模块,为后续功能做好准备。WIDTH, HEIGHT
定义窗口大小为 1520×760 像素。pygame.display.set_mode()
创建了一个指定大小的窗口。pygame.display.set_caption()
设置窗口标题为“炫酷烟花”。亮点:
(2)定义颜色
BLACK = (0, 0, 0)
BLACK
,值为RGB (0, 0, 0),表示黑色。优点:
(3)烟花类定义
class Firework:
def __init__(self):
self.x = random.randint(0, WIDTH)
self.y = HEIGHT + random.randint(50, 250)
self.end_y = random.randint(0, HEIGHT)
self.radius = random.randint(120, 170)
self.explode_radius = 0
self.color = random.choice([...])
self.exploded = False
self.speed = random.uniform(2, 5)
属性解释:
self.x, self.y
:烟花初始位置,x
为横坐标,y
随机生成高于屏幕范围的起始位置,模拟从地面升起。self.end_y
:随机终点高度,决定烟花上升的停止位置。self.radius
:烟花爆炸的最大半径,控制爆炸的范围。self.explode_radius
:当前爆炸半径,用于动态显示烟花扩散。self.color
:随机选择烟花颜色。self.exploded
:烟花是否已经爆炸的状态。self.speed
:烟花上升速度,范围为2至5像素/帧。def move(self):
if self.y > self.end_y:
self.y -= self.speed
else:
if self.explode_radius >= self.radius:
self.reset()
else:
self.explode_radius += 5
功能描述:
def draw(self, screen):
if not self.exploded:
pygame.draw.circle(screen, self.color, (self.x, self.y), 5)
else:
for angle in range(0, 360, 30):
radian = math.radians(angle)
for size in range(5, 0, -1):
dx = math.cos(radian) * (self.explode_radius + size * 10)
dy = math.sin(radian) * (self.explode_radius + size * 10)
temp_color = [...]
pygame.draw.circle(screen, temp_color, (int(self.x + dx), int(self.y + dy)), size)
绘制逻辑:
angle
为间隔,绘制多方向散射的圆点,使用math.cos
和math.sin
计算爆炸效果。重置烟花:
(4)初始化烟花对象
fireworks = [Firework() for _ in range(50)]
(5)主循环
功能描述:
pygame.event.get()
捕获用户操作:
pygame.QUIT
:点击关闭按钮退出程序。pygame.KEYDOWN
:按下ESC
键退出程序。更新和绘制:
screen.fill(BLACK)
:刷新背景,清除上一帧的图像。
遍历每个烟花对象,调用move
更新状态,并根据其状态绘制到屏幕。
pygame.display.flip()
:刷新显示,呈现新帧。
clock.tick(60)
:限制帧率为60帧/秒,确保动画流畅。
3. 代码优点
-
逻辑清晰:
- 烟花类封装了运动、绘制和重置逻辑,代码模块化,易于扩展。
-
动态效果真实:
- 使用
math.cos
和math.sin
模拟爆炸散射角度,呈现立体感。 - 通过逐渐增大的爆炸半径和多层颜色变化,增强了视觉效果。
-
随机性增强多样性:
- 位置、颜色、速度、爆炸范围随机化,使每次烟花展示独特且富有变化。
-
用户体验友好:
- 支持
ESC
键退出,方便用户控制。
4. 总结
这段代码通过简单的逻辑和Pygame的强大功能,成功实现了一个炫目的烟花动画效果。其设计合理、扩展性强,是学习Pygame动画开发的优秀案例。
写在后面
我是一只有趣的兔子,感谢你的喜欢!
作者:Want595