900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【漫天烟花】绚烂烟花点亮夜空也太美了叭 某程序员携带烟花秀给大家拜年啦~

【漫天烟花】绚烂烟花点亮夜空也太美了叭 某程序员携带烟花秀给大家拜年啦~

时间:2023-05-02 22:16:33

相关推荐

【漫天烟花】绚烂烟花点亮夜空也太美了叭 某程序员携带烟花秀给大家拜年啦~

前言

🚀 作者 :“程序员梨子”

🚀 **文章简介 **:本篇文章主要讲解制作一个新年界面化放烟花特效啦。

🚀 **文章源码获取 **: 为了感谢每一个关注我的小可爱💓每篇文章的项目源码都是无偿分

享滴💓👇👇👇👇

点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可!

🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

正文

燃放烟花爆竹是我们的一种迎新辞旧的习俗,然而,大量的燃放行为,会大大地降低空气质量,造

成空气污染还伴随着火灾、伤人等安全隐患。所以很早开始大部分地区都禁止放烟花了~

现在已然是开工高峰期了撒,很多小伙伴儿可能烟花都没见过,呐呐呐 小编今天给大家用代码放

烟花,让大家一次过够烟花隐🎇🎇🎇🎇🎇🎇

一、效果展示

二、源码展示

1)功能实现用到的 Python 库包括:tkinter、PIL、time、random、math,如果之前没有装过第三

方库的话,使用pip install + 模块名字装一下即可。

2)首先,我们使用 tkinter 来创建一个画布

root=tk.Tk()

#绘制一个画布

cv=tk.Canvas(root,height=457,width=690)

#背景图

image=Image.open("bg.jpeg")

photo=ImageTk.PhotoImage(image)

#在画板上绘制一张图片

cv.create_image(0,0,image=photo,anchor='nw')

cv.pack()

3)接着我们来实现烟花燃放的效果并在画布上显示。先来定义一个烟花类 fireworks,类中主要包

括:初始化方法和更新数据方法。

初始化方法主要参数包括:烟花绽放坐标轴、速度、颜色、粒子数和时间等,代码实现如下:

def__init__(self,cv,idx,total,explosion_speed,x=0.,y=0.,

vx=0.,vy=0.,size=2.,color='red',lifespan=2,**kwargs):

self.id=idx

#烟花绽放x轴

self.x=x

#烟花绽放x轴

self.y=y

self.initial_speed=explosion_speed

#外放x轴速度

self.vx=vx

#外放y轴速度

self.vy=vy

#绽放的粒子数

self.total=total

#已停留时间

self.age=0

#颜色

self.color=color

#画布

self.cv=cv

self.cid=self.cv.create_oval(x-size,y-size,x+size,y+size,

fill=self.color)

self.lifespan =lifespan

4)当烟花燃放过后需要进行刷新,看一下更新方法,代码实现如下:

defupdate(self,dt):

self.age+=dt

#粒子膨胀

ifself.alive()andself.expand():

move_x=cos(radians(self.id*360/self.total))*self.initial_speed

move_y=sin(radians(self.id*360/self.total))*self.initial_speed

self.cv.move(self.cid,move_x,move_y)

self.vx=move_x/(float(dt)*1000)

#膨胀到最大下落

elifself.alive():

move_x=cos(radians(self.id*360/self.total))

self.cv.move(self.cid,self.vx+move_x,self.vy+0.5*dt)

self.vy+=0.5*dt

#过期移除

elifself.cidisnotNone:

cv.delete(self.cid)

self.cid=None

5)再接着来看烟花燃放的实现,主要元素包括:烟花的个数、爆炸的范围和速度、停留时间和刷

新时间等,代码实现如下:

defignite(cv):

t=time()

#烟花列表

explode_points=[]

wait_time=randint(10,100)

#爆炸的个数

numb_explode=randint(6,10)

forpointinrange(numb_explode):

#爆炸粒子列表

objects=[]

#爆炸x轴

x_cordi=randint(50,550)

#爆炸y轴

y_cordi=randint(50,150)

speed=uniform(0.5,1.5)

size=uniform(0.5,3)

color=choice(colors)

#爆炸的绽放速度

explosion_speed=uniform(0.2,1)

#爆炸的粒子数半径

total_particles=randint(10,50)

foriinrange(1,total_particles):

r=fireworks(cv,idx=i,total=total_particles,

explosion_speed=explosion_speed,x=x_cordi,y=y_cordi,

vx=speed,vy=speed,color=color,size=size,

lifespan=uniform(0.6,1.75))

#添加进粒子列表里

objects.append(r)

#把粒子列表添加到烟花列表

explode_points.append(objects)

total_time=.0

#在1.8秒时间帧内保持更新

whiletotal_time<1.8:

#让画面暂停0.01s

sleep(0.01)

#刷新时间

tnew=time()

t,dt=tnew,tnew-t

#遍历烟花列表

forpointinexplode_points:

#遍历烟花里的粒子列表

foriteminpoint:

#更新时间

item.update(dt)

#刷新页面

cv.update()

total_time+=dt

root.after(wait_time,ignite,cv)

总结

这么多的烟花.gif 够看了嘛 代码还可以自己制作,想怎么来怎么来~

关注小编获取更多精彩内容!记得点击传送门哈👇

记得三连哦! 如需打包好的源码+素材免费分享滴!传送门

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。