当前位置:网站首页>New Year Fireworks code plus copy, are you sure you don't want to have a look
New Year Fireworks code plus copy, are you sure you don't want to have a look
2022-07-07 05:58:00 【Far away x】
Introduction :
There are many beauties in life , Only this human fireworks , Warm the whole world
I sell voice in the world , When you have enough stars , Set off fireworks to show you
The fireworks
Many cities can't set off fireworks now , But if you slowly raise your hand , Lift to the top , Then suddenly open your five fingers , The congratulations ,
You just set off a fireworks for yourself . At most two at a time , But you know , If you slowly reach over , Hold me , that
In my heart , There are thousands of fireworks —— Rilke 《 Celebrate for me 》
Text :
The beauty of fireworks , So short , But so unrestrained , So warm . Even if there is only one second of life . Also be the most perfect , to open up
The most brilliant .
🥢 Officially tap the code :
# -*- coding: utf-8 -*-
import math, random,time
import threading
import tkinter as tk
import re
#import uuid
Fireworks=[]
maxFireworks=8
height,width=600,600
class firework(object):
def __init__(self,color,speed,width,height):
#uid=uuid.uuid1()
self.radius=random.randint(2,4) # The particle radius is 2~4 Pixels
self.color=color # Particle color
self.speed=speed #speed yes 1.5-3.5 second
self.status=0 # Without the fireworks exploding ,status=0; After the explosion ,status>=1; When status>100 when , The life of fireworks ends
self.nParticle=random.randint(20,30) # Number of particles
self.center=[random.randint(0,width-1),random.randint(0,height-1)] # Fireworks random center coordinates
self.oneParticle=[] # Original particle coordinates (100% In the state of )
self.rotTheta=random.uniform(0,2*math.pi) # Rotation angle of elliptic plane
# Elliptic parametric equation :x=a*cos(theta),y=b*sin(theta)
#ellipsePara=[a,b]
self.ellipsePara=[random.randint(30,40),random.randint(20,30)]
theta=2*math.pi/self.nParticle
for i in range(self.nParticle):
t=random.uniform(-1.0/16,1.0/16) # Produce a [-1/16,1/16) The random number
x,y=self.ellipsePara[0]*math.cos(theta*i+t), self.ellipsePara[1]*math.sin(theta*i+t) # Elliptic parametric equation
xx,yy=x*math.cos(self.rotTheta)-y*math.sin(self.rotTheta), y*math.cos(self.rotTheta)+x*math.sin(self.rotTheta) # Plane rotation equation
self.oneParticle.append([xx,yy])
self.curParticle=self.oneParticle[0:] # Current particle coordinates
self.thread=threading.Thread(target=self.extend) # Create a thread object
def extend(self): # Particle swarm state change function
for i in range(100):
self.status+=1 # Update status identification
self.curParticle=[[one[0]*self.status/100, one[1]*self.status/100] for one in self.oneParticle] # Update particle swarm coordinates
time.sleep(self.speed/50)
def explode(self):
self.thread.setDaemon(True) # Set the current process as a daemon thread
self.thread.start() # Start thread
def __repr__(self):
return ('color:{color}\n'
'speed:{speed}\n'
'number of particle: {np}\n'
'center:[{cx} , {cy}]\n'
'ellipse:a={ea} , b={eb}\n'
'particle:\n{p}\n'
).format(color=self.color,speed=self.speed,np=self.nParticle,cx=self.center[0],cy=self.center[1],p=str(self.oneParticle),ea=self.ellipsePara[0],eb=self.ellipsePara[1])
def colorChange(fire):
rgb=re.findall(r'(.{2})',fire.color[1:])
cs=fire.status
f=lambda x,c: hex(int(int(x,16)*(100-c)/30))[2:] # When the particle life reaches 70% when , The color begins to decay linearly
if cs>70:
ccr,ccg,ccb=f(rgb[0],cs),f(rgb[1],cs),f(rgb[2],cs)
else:
ccr,ccg,ccb=rgb[0],rgb[1],rgb[2]
return '#{0:0>2}{1:0>2}{2:0>2}'.format(ccr,ccg,ccb)
def appendFirework(n=1): # Recursively generate fireworks objects
if n>maxFireworks or len(Fireworks)>maxFireworks:
pass
elif n==1:
cl='#{0:0>6}'.format(hex(int(random.randint(0,16777215)))[2:]) # Produce a 0~16777215(0xFFFFFF) The random number , As a random color
a=firework(cl,random.uniform(1.5,3.5),width,height)
Fireworks.append( {'particle':a,'points':[]} ) # Create a particle display list ,‘particle’ For a fireworks object ,‘points’ The object variable set displayed for each particle
a.explode()
else:
appendFirework()
appendFirework(n-1)
def show(c):
for p in Fireworks: # Every time you refresh the display , First delete all the existing particles
for pp in p['points']:
c.delete(pp)
for p in Fireworks: # According to each fireworks object , Calculate the display object of each particle
oneP=p['particle']
if oneP.status==100: # The status is marked as 100, It means that the life of fireworks is over
Fireworks.remove(p) # Remove the current fireworks
appendFirework() # Add a new fireworks
continue
else:
li=[[int(cp[0]*2)+oneP.center[0],int(cp[1]*2)+oneP.center[1]] for cp in oneP.curParticle] # Translate the ellipse whose center is the origin to the random center coordinates
color=colorChange(oneP) # Calculate the current color according to the current state of fireworks
for pp in li:
p['points'].append(c.create_oval(pp[0]-oneP.radius, pp[1]-oneP.radius, pp[0]+oneP.radius, pp[1]+oneP.radius, fill=color)) # Draw each particle of fireworks
root.after(50, show,c) # Callback , Every time 50ms Refresh once
if __name__=='__main__':
appendFirework(maxFireworks)
root = tk.Tk()
cv = tk.Canvas(root, height=height, width=width)
cv.create_rectangle(0, 0, width, height, fill="black")
cv.pack()
root.after(50, show,cv)
root.mainloop()
🥢 Effect display :
ending :
I hope to meet you on the day of fireworks , In this way, we can get light for a few days before and after the meeting , Become a good day . I also
Hope to play cards together , roast , Eat melon seeds , Watching the TV program of the Spring Festival Gala , Every household is booming , Hot and lively
Noisy .
All right. , This is the end of the article ~
Don't forget to set off fireworks for yourself in either way
If you like it, remember A little bit of praise , If you need a complete source code of the project, you can confide in me !
边栏推荐
- 话说SQLyog欺骗了我!
- R language [logic control] [mathematical operation]
- EMMC打印cqhci: timeout for tag 10提示分析与解决
- 微信小程序蓝牙连接硬件设备并进行通讯,小程序蓝牙因距离异常断开自动重连,js实现crc校验位
- Three level menu data implementation, nested three-level menu data
- SQL query: subtract the previous row from the next row and make corresponding calculations
- 404 not found service cannot be reached in SAP WebService test
- CMD permanently delete specified folders and files
- 目标检测中的损失函数与正负样本分配:RetinaNet与Focal loss
- Hcip eighth operation
猜你喜欢
cf:C. Column Swapping【排序 + 模拟】
PowerPivot - DAX (function)
ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用shap决策图结合LightGBM模型实现异常值检测案例之详细攻略
Reading notes of Clickhouse principle analysis and Application Practice (6)
PTA ladder game exercise set l2-004 search tree judgment
AI face editor makes Lena smile
SAP Spartacus checkout 流程的扩展(extend)实现介绍
《HarmonyOS实战—入门到开发,浅析原子化服务》
Web architecture design process
Check Point:企业部署零信任网络(ZTNA)的核心要素
随机推荐
Loss function and positive and negative sample allocation in target detection: retinanet and focal loss
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
Flinksql read / write PgSQL
[solved] record an error in easyexcel [when reading the XLS file, no error will be reported when reading the whole table, and an error will be reported when reading the specified sheet name]
async / await
数字IC面试总结(大厂面试经验分享)
C nullable type
PowerPivot——DAX(函数)
Cf:c. column swapping [sort + simulate]
Sidecar mode
Go 语言的 Context 详解
[cloud native] what is the microservice architecture?
Go语学习笔记 - gorm使用 - 原生sql、命名参数、Rows、ToSQL | Web框架Gin(九)
VScode进行代码补全
Message queuing: how to ensure that messages are not lost
爬虫练习题(三)
《HarmonyOS实战—入门到开发,浅析原子化服务》
从“跑分神器”到数据平台,鲁大师开启演进之路
SAP ABAP BDC (batch data communication) -018
PTA 天梯赛练习题集 L2-002 链表去重