当前位置:网站首页>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 !
边栏推荐
- Message queue: how to handle repeated messages?
- async / await
- 如何提高网站权重
- PTA TIANTI game exercise set l2-003 moon cake test point 2, test point 3 Analysis
- nVisual网络可视化
- PTA 天梯赛练习题集 L2-002 链表去重
- 线性回归
- STM32 key state machine 2 - state simplification and long press function addition
- Message queue: how to deal with message backlog?
- @pathvariable 和 @Requestparam的详细区别
猜你喜欢
数据中心为什么需要一套基础设施可视化管理系统
数字IC面试总结(大厂面试经验分享)
The 2022 China low / no code Market Research and model selection evaluation report was released
EMMC打印cqhci: timeout for tag 10提示分析与解决
TCC of distributed transaction solutions
老板总问我进展,是不信任我吗?(你觉得呢)
Dynamic memory management
SQLSTATE[HY000][1130] Host ‘host. docker. internal‘ is not allowed to connect to this MySQL server
【FPGA教程案例14】基于vivado核的FIR滤波器设计与实现
PTA 天梯赛练习题集 L2-004 搜索树判断
随机推荐
[cloud native] what is the microservice architecture?
Detailed explanation of platform device driver architecture in driver development
Interview questions and salary and welfare of Shanghai byte
Web authentication API compatible version information
Message queue: how to handle repeated messages?
Input of native applet switches between text and password types
Randomly generate session_ id
SAP ABAP BDC (batch data communication) -018
Reading notes of Clickhouse principle analysis and Application Practice (6)
三级菜单数据实现,实现嵌套三级菜单数据
make makefile cmake qmake都是什么,有什么区别?
Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
Distributed global ID generation scheme
驱动开发中platform设备驱动架构详解
Realize GDB remote debugging function between different network segments
Introduction to distributed transactions
404 not found service cannot be reached in SAP WebService test
Value range of various datetimes in SQL Server 2008
Red Hat安装内核头文件
Digital IC interview summary (interview experience sharing of large manufacturers)