python实现烟花的实例代码怎么编写
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码如下:# -*-
千家信息网最后更新 2024年09月22日python实现烟花的实例代码怎么编写
本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
实现代码如下:
# -*- coding: utf-8 -*-import math, random,timeimport threadingimport tkinter as tkimport re#import uuidFireworks=[]maxFireworks=8height,width=600,600class firework(object): def __init__(self,color,speed,width,height): #uid=uuid.uuid1() self.radius=random.randint(2,4) #粒子半径为2~4像素 self.color=color #粒子颜色 self.speed=speed #speed是1.5-3.5秒 self.status=0 #在烟花未爆炸的情况下,status=0;爆炸后,status>=1;当status>100时,烟花的生命期终止 self.nParticle=random.randint(20,30) #粒子数量 self.center=[random.randint(0,width-1),random.randint(0,height-1)] #烟花随机中心坐标 self.oneParticle=[] #原始粒子坐标(100%状态时) self.rotTheta=random.uniform(0,2*math.pi) #椭圆平面旋转角 #椭圆参数方程: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) #产生一个 [-1/16,1/16) 的随机数 x,y=self.ellipsePara[0]*math.cos(theta*i+t), self.ellipsePara[1]*math.sin(theta*i+t) #椭圆参数方程 xx,yy=x*math.cos(self.rotTheta)-y*math.sin(self.rotTheta), y*math.cos(self.rotTheta)+x*math.sin(self.rotTheta) #平面旋转方程 self.oneParticle.append([xx,yy]) self.curParticle=self.oneParticle[0:] #当前粒子坐标 self.thread=threading.Thread(target=self.extend) #建立线程对象 def extend(self): #粒子群状态变化函数线程 for i in range(100): self.status+=1 #更新状态标识 self.curParticle=[[one[0]*self.status/100, one[1]*self.status/100] for one in self.oneParticle] #更新粒子群坐标 time.sleep(self.speed/50) def explode(self): self.thread.setDaemon(True) #把现程设为守护线程 self.thread.start() #启动线程 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:] #当粒子寿命到70%时,颜色开始线性衰减 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): #递归生成烟花对象 if n>maxFireworks or len(Fireworks)>maxFireworks: pass elif n==1: cl='#{0:0>6}'.format(hex(int(random.randint(0,16777215)))[2:]) # 产生一个0~16777215(0xFFFFFF)的随机数,作为随机颜色 a=firework(cl,random.uniform(1.5,3.5),width,height) Fireworks.append( {'particle':a,'points':[]} ) #建立粒子显示列表,'particle'为一个烟花对象,'points'为每一个粒子显示时的对象变量集 a.explode() else: appendFirework() appendFirework(n-1)def show(c): for p in Fireworks: #每次刷新显示,先把已有的所以粒子全部删除 for pp in p['points']: c.delete(pp) for p in Fireworks: #根据每个烟花对象,计算其中每个粒子的显示对象 oneP=p['particle'] if oneP.status==100: #状态标识为100,说明烟花寿命结束 Fireworks.remove(p) #移出当前烟花 appendFirework() #新增一个烟花 continue else: li=[[int(cp[0]*2)+oneP.center[0],int(cp[1]*2)+oneP.center[1]] for cp in oneP.curParticle] #把中心为原点的椭圆平移到随机圆心坐标上 color=colorChange(oneP) #根据烟花当前状态计算当前颜色 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)) #绘制烟花每个粒子 root.after(50, show,c) #回调,每50ms刷新一次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()
图片展示:
以上就是python实现烟花的实例代码怎么编写,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
烟花
粒子
对象
坐标
状态
椭圆
线程
颜色
代码
方程
实例
参数
寿命
平面
更多
标识
知识
篇文章
随机数
更新
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全与技术学院分数线
腐蚀加载服务器卡退
选择服务器角色
国税组织观看网络安全活动
小型软件开发公司创业计划书
第二代数据库技术系统
四川省国家网络安全局
数据库如何在手机上编写
网络技术''
数据库是一个服务器吗
我国互联网科技成就
sql查询数据库记录数
英国指纹数据库
网络安全对政府单位绩效考核
幻塔电脑版怎么没有荒林镇服务器
龙港中先互联网科技有限公司
可以做软件开发的大学专业
网络安全定义属性
苏州市互众网络技术有限公司
全市人才数据库建设实施方案
Google流数据库
db2数据库PVU
mfc连接数据库的
网络安全面试策略
靖江软件开发哪家好
联想服务器ts250机盖
公安 网络安全问题和建议
北京互联网软件开发价格表
工业网络技术的对口专业
php源码不需要数据库文件