Python烟花秀

目录
系列文章
前言
烟花的粒子类
烟花秀的实现
完整代码
尾声
系列文章
| 序号 | 文章目录 | 直达链接 | |
| 表白系列 | |||
| 1 | 无法拒绝的表白界面 | https://want595.blog.csdn.net/article/details/134744894 | |
| 2 | 满屏飘字表白代码 | https://want595.blog.csdn.net/article/details/135037388 | |
| 3 | 无限弹窗表白代码 | https://want595.blog.csdn.net/article/details/134744711 | |
| 4 | 李峋同款可写字版跳动的爱心 | https://want595.blog.csdn.net/article/details/134744191 | |
| 5 | 流星雨 | https://want595.blog.csdn.net/article/details/134747408 | |
| 6 | 漂浮爱心 | https://want595.blog.csdn.net/article/details/134744929 | |
| 7 | 爱心光波 | https://want595.blog.csdn.net/article/details/134747365 | |
| 8 | 玫瑰花 | https://want595.blog.csdn.net/article/details/134747447 | |
| 节日系列 | |||
| 1 | 新春/跨年 | 烟花秀(2022) | https://want595.blog.csdn.net/article/details/128727394 |
| 烟花秀(2023) | https://want595.blog.csdn.net/article/details/135042880 | ||
| 粒子烟花 | https://want595.blog.csdn.net/article/details/136029420 | ||
| 2 | 圣诞节 | 圣诞礼物 | https://want595.blog.csdn.net/article/details/135336583 |
| 圣诞树(2022) | https://want595.blog.csdn.net/article/details/128428985 | ||
| 绿色圣诞树(2023) | https://want595.blog.csdn.net/article/details/135048607 | ||
| 粉色圣诞树(2023) | https://want595.blog.csdn.net/article/details/135043042 | ||
| 3 | 冬至 | 大雪纷飞 | https://want595.blog.csdn.net/article/details/128806017 |
| 4 | 生日 | 生日蛋糕 | https://want595.blog.csdn.net/article/details/128739755 |
| 5 | 儿童节 | 五彩气球 | https://want595.blog.csdn.net/article/details/128741043 |
| 6 | 国庆节 | 国庆祝福 | https://want595.blog.csdn.net/article/details/128740923 |
| 7 | 万圣节 | 万圣礼物 | https://want595.blog.csdn.net/article/details/128734395 |
| 8 | 愚人节 | 愚人代码 | https://want595.blog.csdn.net/article/details/128696990 |
| 9 | 中秋节 | 浪漫星空 | https://want595.blog.csdn.net/article/details/128737284 |
| 10 | 植树节 | 樱花树 | https://want595.blog.csdn.net/article/details/128700178 |
| 动漫系列 | |||
| 1 | 名侦探柯南系列 | 柯南 | https://want595.blog.csdn.net/article/details/134777613 |
| 2 | 喜羊羊与灰太狼系列 | 喜羊羊 | https://want595.blog.csdn.net/article/details/134778583 |
| 懒羊羊 | https://want595.blog.csdn.net/article/details/134847642 | ||
| 灰太狼 | https://want595.blog.csdn.net/article/details/135335303 | ||
| 小灰灰 | https://want595.blog.csdn.net/article/details/135335445 | ||
| 小香香 | https://want595.blog.csdn.net/article/details/135056783 | ||
| 3 | 海绵宝宝系列 | 海绵宝宝 | https://want595.blog.csdn.net/article/details/134847364 |
| 4 | 哆啦A梦系列 | 哆啦A梦 | https://want595.blog.csdn.net/article/details/135037884 |
| 5 | HelloKitty系列 | hellokitty | https://want595.blog.csdn.net/article/details/135337732 |
| 6 | Tom&Jerry系列 | Tom&Jerry | https://want595.blog.csdn.net/article/details/135337775 |
| 7 | 草莓熊系列 | 草莓熊 | https://want595.blog.csdn.net/article/details/135337832 |
| 8 | 皮卡丘系列 | 迷你皮卡丘 | https://want595.blog.csdn.net/article/details/135337911 |
| 高级皮卡丘 | https://want595.blog.csdn.net/article/details/135337937 | ||
| 豪华皮卡丘 | https://want595.blog.csdn.net/article/details/135337947 | ||
| 炫酷系列 | |||
| 1 | 一闪一闪亮星星系列 | 张万森下雪了 | https://want595.blog.csdn.net/article/details/135336915 |
| 一闪一闪亮星星 | https://want595.blog.csdn.net/article/details/135337049 | ||
| 2 | 代码雨 | https://want595.blog.csdn.net/article/details/135054341 | |
| 3 | 七彩花朵 | https://want595.blog.csdn.net/article/details/135056670 | |
| 4 | 3D星空 | https://want595.blog.csdn.net/article/details/135056516 | |
| 5 | 金榜题名 | https://want595.blog.csdn.net/article/details/135056150 | |
| 6 | 满天星 | https://want595.blog.csdn.net/article/details/135056305 | |
| …… | |||
前言
Python跨年烟花表演,完整代码见:https://want595.blog.csdn.net/article/details/128727394
烟花的粒子类
程序设计
class particle: #烟花的粒子类 def __init__(self,canvas,num,sums,x,y,x_speed,y_speed,explosion_speed,color,size,max_life): self.canvas=canvas #画布 self.num=num #粒子的序号 self.sums=sums #粒子的个数 self.x=x #粒子的横向坐标 self.y=y #粒子的纵向坐标 self.x_speed=x_speed #粒子在横向的移动速度 self.y_speed=y_speed #粒子在纵向的移动速度 self.initial_speed=explosion_speed #粒子的初始速度 self.color=color #粒子的颜色 self.life=0 #粒子当前存活的时间 self.max_life=max_life #粒子最大的存活时间 self.oval=self.canvas.create_oval(x-size,y-size,x+size,y+size,fill=self.color) #粒子的范围(烟花的大小) def expand(self): #判断粒子是否还在爆炸 if self.life<=1.5: #粒子是否到达最大爆炸时间 return 1 else: return 0 def alive(self): #判断粒子是否存活 if self.life<=self.max_life: #粒子是否到达最大存活时间 return 1 else: return 0 def new(self,dt): #更新当前烟花的粒子位置 self.life=self.life+dt #更新当前存活时间 if self.alive() and self.expand(): #如果当前存活时间在爆炸时间内 move_x=m.cos(m.radians(self.num*360/self.sums))*self.initial_speed #则执行爆炸,更新横向坐标 move_y=m.sin(m.radians(self.num*360/self.sums))*self.initial_speed #更新纵向坐标 self.canvas.move(self.oval,move_x,move_y) #在画布上更新烟花 self.x_speed=move_x/(float(dt)*1000) #烟花绽放的速度 elif self.alive(): #如果爆炸结束了,但粒子还存在,则开始坠落 move_x=m.cos(m.radians(self.num*360/self.sums)) #更新横向坐标 self.canvas.move(self.oval,self.x_speed+move_x,self.y_speed+0.05*dt) #在画布上更新烟花 self.y_speed=self.y_speed+0.5*dt #烟花坠落的速度 elif self.oval is not None: #如果在坠落的时间外了,就将烟花从画布上擦除 canvas.delete(self.oval) self.oval=None
程序分析
这段代码是一个烟花粒子类,它描述了烟花粒子的属性和行为。烟花是一种美丽的火花表演,它的每一个火花都是由许多小的烟花粒子组成的。这段代码描述了这些烟花粒子的行为。
该类的构造方法接收了许多参数,包括画布(canvas)、粒子的数量(num)、总数量(sums)、位置(x, y)、移动速度(x_speed, y_speed)、爆炸速度(explosion_speed)、颜色(color)、粒子的大小(size)和最大生命期(max_life)等。在初始化方法中,它创建了一个画布上的椭圆(或者说是烟花),并将其指定为烟花粒子的范围。
在该类中,有三个方法是用于控制烟花粒子的行为。第一个是expand(),用于判断当前粒子是否还在爆炸状态,如果是,则返回1,否则返回0。第二个是alive(),用于判断当前粒子是否还存活,如果是,则返回1,否则返回0。第三个是new(),用于更新当前烟花的粒子位置、速度等信息。
在new()方法中,会根据当前时间(dt)来更新粒子的位置。如果烟花还在爆炸时间内,会执行爆炸,更新横向和纵向坐标,并在画布上绘制烟花。如果爆炸时间结束了,但粒子还存在,则开始坠落,根据横向和纵向速度更新坐标,并在画布上绘制烟花。如果在坠落时间外了,就将烟花从画布上擦除。
总的来说,该类描述了烟花粒子的行为,包括爆炸、坠落和消失等。通过使用该类,我们可以模拟出烟花的美丽表演,再加上一些音乐和灯光效果,一定会很有趣。
烟花秀的实现
程序设计
def fireworks(canvas):#烟花函数(循环更新当前界面)
times=ti.time() #获取当前时间戳
explode_points=[] #烟花列表
wait_time=r.randint(1,10) #等待时间
num_explode=r.randint(20,30) #烟花的个数
for point in range(num_explode): #依次更新各个烟花
firework=[] #当前烟花的粒子列表
x=r.randint(50,550) #当前烟花的粒子在横向的活动范围
y=r.randint(50,150) #当前烟花的粒子在纵向的活动范围
speed=r.uniform(0.5,2) #粒子的绽放速度
size=r.uniform(0.5,1.5) #粒子的大小
color=r.choice(colors) #粒子的颜色
explosion_speed=r.uniform(0.2,5) #粒子爆炸的速度
sum_particles=r.randint(30,50) #粒子的总数
max_life=r.uniform(0.6,1.75) #粒子的最大存活时间
for i in range(1,sum_particles): #当前烟花的每个粒子的参数
fire=particle(canvas,num=i,sums=sum_particles,explosion_speed=explosion_speed,x=x,y=y,x_speed=speed,y_speed=speed,color=color,size=size,max_life=max_life)
firework.append(fire) #将当前粒子加入到当前的烟花粒子列表中
explode_points.append(firework) #将当前烟花加入到烟花列表中
expand_time=0 #初始爆炸的时间
while expand_time<2: #如果爆炸的时间小于2
ti.sleep(0.001) #爆炸帧
newtime=ti.time() #获取爆炸一次的时间戳
times,dt=newtime,newtime-times #更新当前的时间戳
for point in explode_points: #更新所有的粒子位置
for item in point:
item.new(dt)
canvas.update() #更新当前画布
expand_time=expand_time+dt #更新当前的爆炸时间
global root #root界面是全局变量
root.after(wait_time,fireworks,canvas)
程序分析
这段代码是一个烟花函数,用于控制烟花粒子的绘制和更新。在函数中,首先获取当前时间戳,然后生成一个随机的等待时间和烟花的数量。接着,循环更新每个烟花的粒子位置,同时将每个烟花的粒子加入到烟花列表中。然后,循环更新所有粒子的位置,直到爆炸的时间达到2秒为止。
在更新粒子位置的过程中,会根据粒子的参数来更新粒子的位置、速度等信息。其中,使用了particle类来实现对粒子的描述和控制。每个粒子都有自己的大小、颜色、速度等属性。粒子在爆炸时会按照参数来进行偏移,并且在爆炸结束后开始下落。
在函数中,使用了sleep()方法来控制每一帧的等待时间,以达到动态更新的效果。同时,使用了canvas.update()方法来更新画布上的元素,并允许用户交互。
最后,使用after()方法来设置定时器,以便定期调用烟花函数。这样就可以持续不断地播放烟花表演了。
总之,该函数通过调用particle类来实现烟花粒子的控制,并且使用sleep()方法和canvas.update()方法来实现动态更新的效果。对于喜欢烟花表演的人来说,该函数可以提供一个非常有趣的视觉和听觉体验。
完整代码
https://want595.blog.csdn.net/article/details/128727394
尾声
我是一只有趣的兔子,感谢你的喜欢!
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/aa1679dd1e.html
