系列专栏
- 《Python趣味编程》
- 《C/C++趣味编程》
- 《HTML趣味编程》
- 《Java趣味编程》
系列文章
序号 | 直达链接 |
爱心系列 | |
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萌萌的蜡笔小新 |
21 | Python罗小黑 |
22 | Python猪猪侠 |
炫酷系列 | |
1 | Python张万森下雪了 |
2 | Python一闪一闪亮晶晶 |
3 | Python黑客帝国代码雨 |
4 | Python七彩花朵 |
5 | Python模拟3D星空 |
6 | Python金榜题名 |
7 | 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)……
代码分析
这段代码使用了Python的Pygame库来创建一个动态的新春烟花显示效果。该程序模拟了烟花的发射、爆炸以及粒子效果,并在屏幕中央显示了“Happy New Year!”的祝福文字。我们将从程序结构、核心功能、代码实现和细节等方面进行详细分析。
1. 程序结构
程序的主体由几个重要部分组成:
- Pygame初始化和常量定义: 初始化Pygame库并定义一些常量,如屏幕的宽度和高度、背景颜色、帧率等。
- Particle类: 负责定义烟花中的粒子及其行为(位置、速度、生命周期等)。
- Firework类: 负责烟花的爆炸和粒子的生成与更新。
- 主循环(main函数): 负责处理游戏事件、更新画面、发射烟花和显示文字等。
2. Pygame初始化
pygame.init()
这行代码初始化了Pygame库,允许程序使用Pygame的功能,如绘制图形、播放音效、处理事件等。初始化后,我们可以通过Pygame提供的各种方法来控制窗口、图形和声音等。
3. 常量和屏幕设置
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0) # Black
FPS = 60
在此处,定义了几个常量来设置窗口的宽度、长度、背景颜色和帧率。屏幕宽度为1200像素,高度为700像素,背景颜色为黑色,帧率为60帧每秒(FPS)。这些常量为程序的整体布局和动画流畅度提供了基础。
接下来,使用以下代码创建一个Pygame窗口,并设置标题:
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')
pygame.display.set_mode()
方法创建一个宽1200像素,高700像素的屏幕,pygame.display.set_caption()
设置窗口标题为“新春烟花”。
4. 字体设置
font = pygame.font.SysFont("Comic Sans MS", 100)
text_color = (255, 255, 255) # White color for the text
通过pygame.font.SysFont()
方法,程序使用了“Comic Sans MS”字体,字号为100,用来绘制屏幕上的文字(“Happy New Year!”)。文字的颜色设置为白色(RGB为255, 255, 255)。
5. Particle类
Particle
类用于表示烟花中的每一个粒子。每个粒子有其独特的属性:位置(x
, y
)、颜色(color
)、速度(vx
, vy
)、角度(angle
)、生命周期(life
)等。
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
x
,y
:粒子初始的坐标。color
:粒子的颜色。angle
:粒子的发射角度,单位为弧度。speed
:粒子的初始速度。life
:粒子的生存周期。vx
,vy
:粒子的水平和垂直速度,由角度和速度计算得出。
update()
方法负责更新粒子的位置,并考虑了重力效应:
def update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05 # Gravity effect
每帧,粒子的x
和y
坐标根据其速度vx
和vy
进行更新,life
减1表示粒子逐渐消失,同时垂直速度(vy
)增加模拟重力的作用。
draw()
方法通过pygame.draw.circle()
绘制粒子:
def draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)
6. Firework类
Firework
类用于模拟烟花的爆炸过程和管理其中的粒子。
x
,y
:烟花的发射位置。color
:烟花的颜色。num_particles
:每次爆炸时生成的粒子数,默认值为100。spread
:粒子爆炸的角度范围,默认值为2 * math.pi
,表示360度范围内。
explode()
方法负责生成烟花爆炸时的粒子:每次烟花爆炸时,会随机生成若干粒子(角度、速度和生命周期是随机的),并将其加入particles
列表。
update()
方法负责更新粒子状态并检查是否爆炸。
7. 主循环
主循环是程序的核心部分,负责处理事件、更新画面和控制烟花的生成与显示。
- 事件处理: 通过
pygame.event.get()
获取事件并检查是否退出程序。 - 烟花发射: 以30%的概率随机发射新烟花。
- 更新与绘制烟花: 每帧更新所有烟花的状态并绘制它们。
- 文字显示: 在屏幕中央绘制“Happy New Year!”的祝福文字。
8. 总结
这段代码通过Pygame实现了一个简单但美丽的烟花效果。它利用了粒子系统来模拟烟花爆炸后的粒子运动,并通过随机化粒子速度、角度和生命周期,确保每次爆炸都有独特的效果。此外,代码也通过主循环实时更新烟花的状态并在屏幕上显示祝福文字,为新春节日增添了节日氛围。
写在后面
我是一只有趣的兔子,感谢你的喜欢!