Python新春烟花
目录
系列文章
写在前面
技术需求
完整代码
下载代码
代码分析
1. 程序初始化与显示设置
2. 烟花类 (Firework)
3. 粒子类 (Particle)
4. 痕迹类 (Trail)
5. 烟花更新与显示
6. 主函数 (fire)
7. 游戏循环
8. 总结
注意事项
写在后面
系列文章
序号 | 直达链接 |
爱心系列 | |
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 被用来创建图形界面、绘制图形、处理用户输入和管理时间(帧率)。通过
pg.init()
初始化 Pygame,pg.display.set_mode()
创建屏幕,pg.draw.circle()
绘制圆形等操作。 -
随机数生成:代码广泛使用了 Python 的
random
库来生成随机数,这些随机数控制了烟花和粒子的颜色、速度、方向、爆炸大小等。ra.randint()
和ra.uniform()
用于生成随机的整数和浮动数值,模拟烟花的自然和不确定性。 -
物理模拟:在代码中,物理效果主要体现在重力和粒子的运动上。使用 Pygame 提供的
Vector2
类来表示粒子的二维坐标和速度,模拟烟花粒子的运动和加速度。通过apply_force()
和move()
方法,粒子会受重力等外力影响,产生自然的运动轨迹。 -
粒子系统:烟花爆炸产生的效果是通过粒子系统实现的。每个烟花爆炸时会生成多个粒子对象,每个粒子都有自己的颜色、大小、速度和生命周期。粒子不断地移动并逐渐衰退,最终消失。粒子系统模拟了真实世界中烟花散开后的效果。
-
路径追踪(Trail):每个粒子都有一个尾迹(Trail),在移动过程中,粒子在自己的路径上留下痕迹,这种效果通过记录粒子之前的多个位置来实现。
Trail
类用于生成和显示粒子的路径。尾迹颜色和大小逐渐变化,模拟烟花轨迹逐渐消失的效果。 -
图形渲染:通过 Pygame 提供的
pg.draw.circle()
和screen.blit()
方法,代码绘制了粒子、烟花和文本。screen.fill()
用于填充背景色,确保每一帧都能清除掉前一帧的内容。每个粒子和烟花的显示由show()
方法控制,确保它们在屏幕上正确呈现。 -
动态文本渲染:使用
pg.font.SysFont()
和font.render()
渲染文本。代码将 "Happy New Year!" 文本以特定字体和颜色显示在屏幕中央,模拟节日庆祝的氛围。 -
事件处理和程序控制:代码通过
pg.event.get()
获取并处理 Pygame 中的事件。pg.QUIT
事件用于监听关闭窗口的操作。游戏的主循环中使用了running
标志来控制程序是否继续运行。通过clock.tick(99)
控制帧率,确保每秒运行 99 帧。 -
对象导向编程:代码采用了面向对象的编程方式,定义了多个类(如
Firework
、Particle
和Trail
)来封装烟花、粒子和痕迹的行为和属性。这种方式有助于代码的结构化和模块化,便于扩展和维护。
完整代码
import pygame as pg
import random as ra
import mathpg.init()
pg.display.set_caption("🎇")winScreen = pg.display.Info()
screenWidth = winScreen.current_w
screenHeight = winScreen.current_hvector = pg.math.Vector2trail_colors = [(45, 45, 45), (60, 60, 60), (75, 75, 75), (125, 125, 125), (150, 150, 150)]# 烟花类
class Firework:def __init__(self):# 随机生成颜色self.colour = (ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255))# 随机生成三种颜色self.colours = ((ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)),(ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)),(ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)))# 生成一个表示发射出的火花的粒子对象self.firework = Particle(ra.randint(0,screenWidth), screenHeight, True,
…………
代码分析
这段代码是使用 Python 和 Pygame 库实现的一个烟花动画程序。其主要功能是模拟烟花在屏幕上绽放的效果,结合了粒子系统和动态效果,通过类和方法进行模块化设计,具有较强的可扩展性。以下是对这段代码的详细分析,分为几个部分:程序初始化、类设计、粒子和火花效果的实现、显示与更新的过程以及主函数的运行机制。
1. 程序初始化与显示设置
pg.init()
pg.display.set_caption("🎇")winScreen = pg.display.Info()
screenWidth = winScreen.current_w
screenHeight = winScreen.current_hvector = pg.math.Vector2
程序开始时调用 pg.init()
来初始化 Pygame 库,这个调用非常关键,它会为所有 Pygame 模块做好初始化工作。接着,使用 pg.display.set_caption("🎇")
设置窗口标题为烟花的表情符号(🎇)。然后,通过 pg.display.Info()
获取当前屏幕的分辨率, screenWidth
和 screenHeight
分别存储屏幕的宽度和高度,用于后续创建窗口时设置显示区域大小。
vector = pg.math.Vector2
用于简化代码中二维向量的运算。pg.math.Vector2
提供了对二维向量的支持,可以很方便地进行加法、减法、乘法等操作。
2. 烟花类 (Firework
)
class Firework:def __init__(self):self.colour = (ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255))self.colours = ((ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)),(ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)),(ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255)))self.firework = Particle(ra.randint(0,screenWidth), screenHeight, True, self.colour)self.exploded = Falseself.particles = []self.min_max_particles = vector(666, 999)
Firework
类是整个烟花效果的核心。该类模拟了烟花从发射到爆炸的全过程。在构造函数中,首先随机生成烟花的颜色 self.colour
,并且生成三种不同的颜色 self.colours
,这些颜色将在爆炸后用于粒子的显示。
self.firework = Particle(ra.randint(0,screenWidth), screenHeight, True, self.colour)
创建了一个粒子对象,模拟烟花发射时的火花。self.exploded
用于标记烟花是否已经爆炸,self.particles
存储爆炸后的所有粒子。self.min_max_particles
表示爆炸后产生粒子的数量范围。
3. 粒子类 (Particle
)
class Particle:def __init__(self, x, y, firework, colour):self.firework = fireworkself.pos = vector(x, y)self.origin = vector(x, y)self.radius = 25self.remove = Falseself.explosion_radius = ra.randint(15, 25)self.life = 0self.acc = vector(0, 0)self.trails = []self.prev_posx = [-10] * 10self.prev_posy = [-10] * 10if self.firework:self.vel = vector(0, -ra.randint(17, 20))self.size = 5self.colour = colourfor i in range(5):self.trails.append(Trail(i, self.size, True))else:self.vel = vector(ra.uniform(-1, 1), ra.uniform(-1, 1))self.vel.x *= ra.randint(7, self.explosion_radius + 2)self.vel.y *= ra.randint(7, self.explosion_radius + 2)self.size = ra.randint(2, 4)self.colour = ra.choice(colour)for i in range(5):self.trails.append(Trail(i, self.size, False))
Particle
类代表了烟花中的单个粒子。它包含了烟花发射和爆炸过程中粒子的所有物理属性和视觉效果。
self.pos
是粒子的位置,self.origin
是初始位置。self.vel
和self.acc
分别表示粒子的速度和加速度,使用pg.math.Vector2
进行向量运算。self.trails
存储粒子的痕迹(烟花尾迹),它是一个列表,包含多个Trail
对象。self.life
控制粒子的生命周期,self.remove
标记粒子是否应该被移除。
在构造函数中,依据粒子是烟花发射出来的火花还是爆炸后的粒子,设置了不同的初速度、大小、颜色等属性。火花的速度较大,并且其尾迹动态显示;爆炸后的粒子速度较小,颜色随机。
4. 痕迹类 (Trail
)
class Trail:def __init__(self, n, size, dynamic):self.pos_in_line = nself.pos = vector(-10, -10)self.dynamic = dynamicif self.dynamic:self.colour = trail_colors[n]self.size = int(size - n / 2)else:self.colour = (255, 255, 200)self.size = size - 2if self.size < 0:self.size = 0
Trail
类表示粒子尾迹的效果。在构造函数中,self.dynamic
用于区分动态尾迹和静态尾迹。动态尾迹的颜色和大小会随着时间变化,静态尾迹则显示为固定的颜色和较小的尺寸。
5. 烟花更新与显示
def update(win, fireworks):for fw in fireworks:fw.update(win)if fw.remove():fireworks.remove(fw)pg.display.update()
update
函数用于更新所有烟花的状态。它遍历每个烟花对象,调用其 update
方法来处理烟花的动画效果。如果某个烟花的所有粒子已经移除,则从 fireworks
列表中删除该烟花。
6. 主函数 (fire
)
def fire():screen = pg.display.set_mode((screenWidth, screenHeight - 66))clock = pg.time.Clock()fireworks = [Firework() for i in range(2)]running = Truefont = pg.font.SysFont("comicsansms", 99)text = "Happy New Year!"text_color = (255, 190, 200)rendered_text = font.render(text, True, text_color)
fire
函数是程序的主入口,负责创建窗口、初始化时钟、设置烟花效果和显示文本。
首先,使用 pg.display.set_mode
创建窗口,并根据屏幕大小动态设置窗口的尺寸。接着,创建一个时钟对象 clock
,用于控制游戏的帧率。fireworks
列表初始化了两个烟花对象。文本部分使用 pg.font.SysFont
加载系统字体,生成一个显示“Happy New Year!”的文本,并计算文本在屏幕上的位置。
7. 游戏循环
while running:clock.tick(99)for event in pg.event.get():if event.type == pg.QUIT:running = Falsescreen.fill((20, 20, 30))screen.blit(rendered_text, (text_x, text_y))if ra.randint(0, 10) == 1:fireworks.append(Firework())update(screen, fireworks)
游戏进入主循环,每一帧更新烟花的状态并显示在屏幕上。通过 clock.tick(99)
控制帧率为 99 帧每秒。每次循环中,如果有退出事件,则终止程序。窗口背景色填充为深色 (20, 20, 30)
,然后绘制上一步计算出的文本。
在每一帧中,可能会随机生成新的烟花对象(通过 ra.randint(0, 10) == 1
来决定),然后更新所有烟花的显示效果。
8. 总结
这段代码通过精心设计的 Firework
、Particle
和 Trail
类,以及通过粒子系统模拟了烟花从发射到爆炸的过程。每个粒子都有自己的物理行为,如速度、加速度和尾迹效果,且随着时间的推移,粒子的生命周期逐渐结束,最终消失。这段代码不仅展示了烟花的动画效果,还包含了多种粒子动态效果,如随机颜色、速度、尾迹
注意事项
如遇到问题"no module named pygame",请在终端输入"pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame",等待pygame库安装完成后再运行程序
写在后面
我是一只有趣的兔子,感谢你的喜欢!
相关文章:

Python新春烟花
目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...

VirtualBox can‘t enable the AMD-V extension
个人博客地址:VirtualBox cant enable the AMD-V extension | 一张假钞的真实世界 最近一次完成Deepin的系统更新后,进入VirtualBox创建的虚拟机(Widows10)时,出现以下错误: 根据网址“https://askubuntu.…...

掘金--创意标题匹配问题
问题描述 在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 bidword 对创意中的通配符(通配符是用成对 {} 括起来的字符串&#x…...

OBU和T-Box
OBU(On-Board Unit,车载单元)和T-Box(Telematics Box,远程信息处理控制单元)都是用于车联网和智能交通系统的车载设备,但它们的功能、应用场景和技术特点存在显著差异。以下是两者的详细对比&am…...

【PVE】Proxmox VE8.0+创建LXC容器安装docker
为了不影响PVE宿主机,通常使用套娃的形式安装Docker容器,再安装相关docker应用。首先在CT模板中创建 Linux 容器,推荐使用Debian。开启ssh登录,修改debian配置,安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…...

一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
文章目录 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk1. 建议按文章顺序从头看,一看到底,豁然开朗2. 啥是chunkIds3.怎么使用chunkIds4. 啥是runtimeChunk5. 怎么使用runtimeChunk 一文大白话讲清楚webpack基本使用——11——chun…...

Java 中的设计模式:经典与现代实践
Java 中的设计模式:经典与现代实践 1. 设计模式简介 设计模式是一种软件开发中的思想,它为我们提供了一些经过验证的、能够应对常见问题的解决方案。学习和掌握设计模式能够让开发者在面对复杂的需求时,能够设计出更加灵活、可维护的代码。…...

DRG_DIP 2.0时代医院程序结构转型与数据结构优化研究
一、引言 1.1 DRG_DIP 2.0 改革背景与意义 医保支付方式改革在医疗保障制度改革中占据着极为关键的地位,是推动医疗领域变革的核心力量。它犹如一把精准的手术刀,对医疗资源的合理分配、医疗服务质量的稳步提升以及医疗费用的有效控制起着决定性作用。…...

一部手机如何配置内网电脑同时访问内外网
做过运维的朋友都知道,最麻烦的是运维电脑不能远程,每次都得现场进行维护,明明客户那边有可以访问内网的电脑,怎么操作能将这台电脑能访问跟到外网呢,这样不就能通过远程软件远程了吗?嘿嘿。按以下步骤试试…...

国产低功耗带LCD驱动和触摸按键功能的MCU
以下是国产低功耗、集成LCD驱动和触摸按键功能的MCU精选型号及其核心特性,结合性能、功耗和适用场景进行综合推荐: 1.灵动微MM32L0130系列 257 核心特性:低功耗:待机模式功耗低至100nA,支持多种低功耗模式。 LCD驱动&a…...

XCP 协议基础
文章目录 一、XCP 简介二、XCP的主要功能三、什么是标定四、什么时候进行标定五、标定的意义六、标定的三层架构XCP协议 和 CCP协议的区别参考 一、XCP 简介 XCP 协议的全称为 eXtended Calibration Protocol,即扩展标定协议。 另有其他定义,XCP 协议全…...

Swift 中 Codable 和 Hashable 的理解
最近初学Swift,碰到下面的代码脑袋里冒出疑问:Codable 和 Hashable是啥?怎么理解? struct Landmark: Hashable, Codable {var id: Intvar name: Stringvar park: Stringvar state: Stringvar description: String }针对上面的疑问…...

基于 WPF 平台实现成语游戏
一、引言 在软件开发领域,利用各种框架开发有趣的应用程序是提升技术能力和增加开发乐趣的有效方式。WPF(Windows Presentation Foundation)作为微软强大的桌面应用开发框架,提供了丰富的图形和交互功能。本文将带领大家基于 WPF…...

2024“博客之星”——我的博客成长与技术洞察
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 一、引言二、个人成长与突破盘点(一)技能提升与知识拓展(二)创作风格与影响力提升…...

HTTPS协议简述
HTTPS 协议简介 HTTPS 是 HTTP Security 的组合,即在 HTTP 的基础上加入了安全性机制,主要通过加密传输、身份认证和数据完整性保护来确保通信的安全性。 为了实现这一目标,HTTPS 引入了 加密技术,包括对称加密、非对称加密和数…...

前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!
引言 时光飞逝,2024年已经来临,回顾过去一年,科技的迅猛进步简直让人目不暇接。 在人工智能(AI)越来越强大的今天,我们不再停留在幻想阶段,量子计算的雏形开始展示它的无穷潜力,Web …...

HTML常用属性
HTML标签的常见属性包括许多不同的功能,可以为元素提供附加信息或控制元素的行为。以下是一些常见的属性及其解释: 1. src 描述:src(source)属性指定一个资源的路径,通常用于图像、音频、视频等标签。常见…...

电子应用设计方案100:智能家庭AI电风扇系统设计
智能家庭 AI 电风扇系统设计 一、引言 智能家庭 AI 电风扇系统旨在为用户提供更加舒适、便捷和个性化的吹风体验,通过融合人工智能技术和先进的控制算法,实现智能化的风速调节、风向控制和场景适应。 二、系统概述 1. 系统目标 - 实现精准的风速调节&a…...

ThinkPHP 8请求处理-获取请求对象与请求上下文
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…...

工厂模式 - 工厂方法模式、抽象工厂模式
引言 工厂模式(Factory Pattern)是设计模式中创建型模式的一种,它提供了一种创建对象的最佳方式。工厂模式的核心思想是将对象的创建与使用分离,使得代码更加灵活、可扩展。工厂模式主要分为两种:工厂方法模式和抽象工…...

2025年已过6%
前些阵子,注意到一个网站的年度进度条显示今年已完成4%的进度,而今天是1月22日,再一看已过去6%。如果1个月按30天来计算,1个月也就占一年1/12,差不多在8%-9%左右。 也许你会感觉这6%过得很快,也许你会感觉这…...

C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
上一篇: C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果https://blog.csdn.net/beijinghorn/article/details/123478581 C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net…...

UWB高精度定位技术在智能仓储中的应用
在智能化和数字化转型的浪潮中,UWB高精度定位系统逐渐成为企业优化仓储管理和生产调度的关键技术。结合RFID标签打印机和服装生产型ERP软件,这一技术为企业带来了全新的管理方式和效率提升。 UWB高精度定位系统的核心优势 UWB(超宽带&…...

计算机毕业设计hadoop+spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制
目录 一、背景 二、核心特性 2.1 AI驱动的代码自动生成 2.2 智能问答与代码补全 2.3 多语言支持 2.4 插件与扩展 三、架构 四、下载使用 4.1 下载与安装 4.2 界面与配置 五、应用实践 5.1 快速生成代码 5.2 智能问答与调试 5.3 团队协作与代码审查 六、与Cursor…...

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅
CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅 🌟 默语,是一位在技术分享与社区建设中坚持深耕的博客作者。今年,我有幸再次入围成为 CSDN 博客之星TOP300 的一员,这既是对过往努力的肯定,也是对未来探…...

《探秘鸿蒙Next:非结构化数据处理与模型轻量化的完美适配》
在鸿蒙Next的人工智能应用场景中,处理非结构化数据并使其适配模型轻量化需求是一项关键且具有挑战性的任务。以下是一些有效的方法和策略。 数据预处理 数据清洗:非结构化数据中往往存在噪声、重复和错误数据。对于文本数据,要去除乱码、特殊…...

async++库的使用示例
1、普通异步函数 如前面的博客介绍的,这个库中提供了async::spawn方法,这个方法通常用来启动异步函数,这个框架会利用线程池去完成函数,因此要注意数据安全。正因为将任务放到了单独的线程执行,并且还有调度开销&…...

springboot基于微信小程序的手机银行系统
Spring Boot基于微信小程序的手机银行系统是一种结合现代Web技术和移动应用优势的创新金融服务平台。 一、系统背景与意义 随着信息技术的快速发展和用户对便捷金融服务需求的日益增长,传统手机银行系统的人工管理方法已逐渐显露出效率低下、安全性低以及信息传输…...

25/1/22 算法笔记<ROS2> TF变换
TF(Transform) 是 ROS(Robot Operating System)中的一个核心功能,用于管理和发布坐标系之间的变换关系。TF 的主要作用是描述机器人系统中各个部分(如传感器、执行器、底盘等)之间的位置和姿态关…...