当前位置:网站首页>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 !
边栏推荐
- Input of native applet switches between text and password types
- Sidecar mode
- 【日常训练--腾讯精选50】292. Nim 游戏
- Mysql-centos7 install MySQL through yum
- Go language learning notes - Gorm use - Gorm processing errors | web framework gin (10)
- Reading notes of Clickhouse principle analysis and Application Practice (6)
- Personal imitation SSM framework
- Flask1.1.4 Werkzeug1.0.1 源碼分析:啟動流程
- Add salt and pepper noise or Gaussian noise to the picture
- The 2022 China low / no code Market Research and model selection evaluation report was released
猜你喜欢

Digital IC interview summary (interview experience sharing of large manufacturers)

C nullable type

Bbox regression loss function in target detection -l2, smooth L1, IOU, giou, Diou, ciou, focal eiou, alpha IOU, Siou

《ClickHouse原理解析与应用实践》读书笔记(6)

TCC of distributed transaction solutions

Five core elements of architecture design

力扣102题:二叉树的层序遍历

得物客服一站式工作台卡顿优化之路

Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture

Distributed global ID generation scheme
随机推荐
高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
《HarmonyOS实战—入门到开发,浅析原子化服务》
PTA 天梯赛练习题集 L2-003 月饼 测试点2,测试点3分析
上海字节面试问题及薪资福利
[SQL practice] a SQL statistics of epidemic distribution across the country
从“跑分神器”到数据平台,鲁大师开启演进之路
TCC of distributed transaction solutions
Modes of optical fiber - single mode and multimode
线性回归
Things about data storage 2
Dynamic memory management
关于服装ERP,你知道多少?
深度聚类:将深度表示学习和聚类联合优化
如何提高网站权重
Go 語言的 Context 詳解
How to get free traffic in pinduoduo new store and what links need to be optimized in order to effectively improve the free traffic in the store
微信小程序蓝牙连接硬件设备并进行通讯,小程序蓝牙因距离异常断开自动重连,js实现crc校验位
PowerPivot - DAX (function)
Personal imitation SSM framework
zabbix_get测试数据库失败