2022跨年烟花代码用Python送你一场跨年烟花秀
2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀。
我们用到的 Python 模块包括:tkinter、PIL、time、random、math,如果第三方模块没有装的话,pip install 一下即可,下面看一下代码实现。
导库import tkinter as tkfrom PIL import Image, ImageTk from time import time, sleep from random import choice, uniform, randint from math import sin, cos, radians
烟花颜色
colors = ["red", "blue", "yellow", "white", "green", "orange", "purple", "seagreen", "indigo", "cornflowerblue"]
定义烟花类class 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
# 更新数据
def update(self, dt):
self.age += dt
# 粒子膨胀
if self.alive() and self.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)
# 膨胀到最大下落
elif self.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
# 过期移除
elif self.cid is not None:
cv.delete(self.cid)
self.cid = None
# 定义膨胀效果的时间帧
def expand(self):
return self.age <= 1.5
# 检查粒子是否仍在生命周期内
def alive(self):
return self.age <= self.lifespan
燃放烟花def ignite(cv):
t = time()
# 烟花列表
explode_points = []
wait_time = randint(10, 100)
# 爆炸的个数
numb_explode = randint(6, 10)
for point in range(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)
for i in range(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 秒时间帧内保持更新
while total_time < 1.8:
# 让画面暂停 0.01s
sleep(0.01)
# 刷新时间
tnew = time()
t, dt = tnew, tnew - t
# 遍历烟花列表
for point in explode_points:
# 遍历烟花里的粒子列表
for item in point:
# 更新时间
item.update(dt)
# 刷新页面
cv.update()
total_time += dt
root.after(wait_time, ignite, cv)
启动if __name__ == "__main__":
root = tk.Tk()
# 绘制一个画布
cv = tk.Canvas(root, height=400, width=600)
# 背景图
image = Image.open("bg.jpg")
photo = ImageTk.PhotoImage(image)
# 在画板上绘制一张图片
cv.create_image(0, 0, image=photo, anchor="nw")
cv.pack()
root.protocol(close)
root.after(100, ignite, cv)
# 生成窗口
root.mainloop()
看一下效果:
电动车面临淘汰,氢动车出现,不充电续航更远,车主十分期待现在人们生活中除了汽车之外,最重要的交通代步工具就是电动车,相比汽车,电动车方便灵活,不会堵车,也更容易停车,所以深受人们喜爱,尤其是在城市内短途出行的时候,发挥了重要的作用。如今
走进八月,向光而行时光的针脚,一路向前。看,八月的阳光,从窗口照了进来。它带着炙热与明亮,带着问候与祝福,也带着从容与淡定,如约而至,亦如昨日般的明媚与动人。八月来了,又是新的一个月份,也是新的一天
库里VS微笑刺客,谁是历史第二控卫?对比10项数据和荣誉NBA历史上最伟大的控球后卫,毫无悬念就是魔术师了,他和乔丹一样,代表着各自位置的天花板。那在魔术师之后,谁是历史第二控卫呢?每个球迷心中的答案都不一样,有人认为是库里,有人认为是
你是我的春天,要相信春天终会来临只要你在,四季皆春!转眼间疫情围绕人间已经三年了,,人生又有多少个三年呢!从2020到2022,每一天都在希望疫情赶紧过去,多么想突然有一天广播说到疫情结束了!看过这部电影,先不管
新歌一直说不清解析歌曲一直说不清以心碎的句子开篇,去铺垫悲伤的情绪,然后继续用忧伤的词语去描叙过去我对你为爱痴狂的绵绵情意。还有就是让整首词的情绪上升,所以开始就用情景交融的写法去写在爱里挣扎的我有
八月份新机大混战安卓携手骁龙8已经杀疯了今天是8月1日,天气很热,但机圈更热,这个月将会有一大批骁龙8新机上架,从目前各厂商的预热信息看,都是清一色的旗舰机,这里我汇总一波目前得到的新机信息红米K50SProK50宇宙的
骁龙8gen1手机排行榜十大骁龙8gen1手机产品,其中前十名分别是RedmiK50电竞版(12GB256GB)小米12(8GB128GB)小米12Pro(12GB256GB)一加10Pro(8GB256
让iPhone物超所值的备忘录使用技巧iPhone手机的性能是有目共睹的,很多iPhone用户之所以选择iPhone,就是对它的性能比较看好。一款手机的性能,是需要通过软件来体现的,而iPhone手机在办公中的性能,则
iphone14系列即将发布,现在买iphone13系列香吗?每年很多媒体和数码发烧友都在关心新款iphone何时发布,而转眼来看iphone13系列已经要发布快一年的时间了,大家现在已经没有心思再关心iphone13系列了,已经把注意力转移
勇闯深水区!盘点各国产手机厂商的那些自研芯片们近年来,自研芯片的浪潮席卷了整个手机行业,各大国产手机厂商都纷纷表示要自研芯片,值得注意的是,这里面说的芯片可并不单单指广为人知的处理器或者基带,也并不意味着联发科和高通很快就要面
八月发售游戏部分总结下篇包括黑道圣徒灵魂骇客2黑道圣徒(SaintsRow)预购价格209(土区108。85)游戏简介玩家身为未来的老大,在妮娜凯文和伊莱等人的帮助下,将会创立圣徒,对抗豹子帮偶像派及马歇尔等敌对势力,在圣多伊