这篇文章主要介绍了Python如何实现浪漫烟花效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1 旖旎风景

马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈......),这里先给大家拜年啦,祝大家虎年快乐,虎年爆富!

首先一首原创诗分享给大家,然后欣赏一下烟花代码,用Python实现的。

魏巍中华龙在飞,能驭其者方可主沉浮,今夕新年,晚风过威奢, 请卿听我歌:

新年傲啸

烟花冲破九霄,

正如神雕在傲啸;

黑夜捅了它一刀;

五彩的血溅在黑夜外套;

于是傲啸浸透夜的衣角;

只愿与卿震响九霄!

龙吟虎啸!

2 请卿赏之3 Python代码实现

#=================导入包===================='''导入pygame,PythonPygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、MacOS等操作系统,具有良好的跨平台性。'''importpygamefromrandomimportrandint,uniform,choiceimportmath#===========首先设置全局变量====================vector=pygame.math.Vector2#重力变量gravity=vector(0,0.3)#控制窗口的大小DISPLAY_WIDTH=DISPLAY_HEIGHT=800#颜色选项trail_colours=[(45,45,45),(60,60,60),(75,75,75),(125,125,125),(150,150,150)]dynamic_offset=1static_offset=3#=======Firework:整体部分;================classFirework:def__init__(self):#随机颜色self.colour=(randint(0,255),randint(0,255),randint(0,255))self.colours=((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255)))self.firework=Particle(randint(0,DISPLAY_WIDTH),DISPLAY_HEIGHT,True,self.colour)#Createsthefireworkparticleself.exploded=Falseself.particles=[]self.min_max_particles=vector(100,225)defupdate(self,win):#每帧调用ifnotself.exploded:self.firework.apply_force(gravity)self.firework.move()fortfinself.firework.trails:tf.show(win)self.show(win)ifself.firework.vel.y>=0:self.exploded=Trueself.explode()else:forparticleinself.particles:particle.apply_force(vector(gravity.x+uniform(-1,1)/20,gravity.y/2+(randint(1,8)/100)))particle.move()fortinparticle.trails:t.show(win)particle.show(win)defexplode(self):#amount数量amount=randint(self.min_max_particles.x,self.min_max_particles.y)foriinrange(amount):self.particles.append(Particle(self.firework.pos.x,self.firework.pos.y,False,self.colours))defshow(self,win):pygame.draw.circle(win,self.colour,(int(self.firework.pos.x),int(self.firework.pos.y)),self.firework.size)defremove(self):ifself.exploded:forpinself.particles:ifp.removeisTrue:self.particles.remove(p)iflen(self.particles)==0:returnTrueelse:returnFalse#================Particle:烟花粒子(包含轨迹)======================classParticle:def__init__(self,x,y,firework,colour):self.firework=fireworkself.pos=vector(x,y)self.origin=vector(x,y)self.radius=20self.remove=Falseself.explosion_radius=randint(5,18)self.life=0self.acc=vector(0,0)#trailvariablesself.trails=[]#storestheparticlestrailobjectsself.prev_posx=[-10]*10#storesthe10lastpositionsself.prev_posy=[-10]*10#storesthe10lastpositionsifself.firework:self.vel=vector(0,-randint(17,20))self.size=5self.colour=colourforiinrange(5):self.trails.append(Trail(i,self.size,True))else:self.vel=vector(uniform(-1,1),uniform(-1,1))self.vel.x*=randint(7,self.explosion_radius+2)self.vel.y*=randint(7,self.explosion_radius+2)#向量self.size=randint(2,4)self.colour=choice(colour)#5个tails总计foriinrange(5):self.trails.append(Trail(i,self.size,False))defapply_force(self,force):self.acc+=forcedefmove(self):ifnotself.firework:self.vel.x*=0.8self.vel.y*=0.8self.vel+=self.accself.pos+=self.velself.acc*=0ifself.life==0andnotself.firework:#检查粒子的爆炸范围distance=math.sqrt((self.pos.x-self.origin.x)**2+(self.pos.y-self.origin.y)**2)ifdistance>self.explosion_radius:self.remove=Trueself.decay()self.trail_update()self.life+=1defshow(self,win):pygame.draw.circle(win,(self.colour[0],self.colour[1],self.colour[2],0),(int(self.pos.x),int(self.pos.y)),self.size)defdecay(self):#randomdecayoftheparticlesif50>self.life>10:#earlystagetheirisasmallchanceofdecayran=randint(0,30)ifran==0:self.remove=Trueelifself.life>50:ran=randint(0,5)ifran==0:self.remove=Truedeftrail_update(self):self.prev_posx.pop()self.prev_posx.insert(0,int(self.pos.x))self.prev_posy.pop()self.prev_posy.insert(0,int(self.pos.y))forn,tinenumerate(self.trails):ift.dynamic:t.get_pos(self.prev_posx[n+dynamic_offset],self.prev_posy[n+dynamic_offset])else:t.get_pos(self.prev_posx[n+static_offset],self.prev_posy[n+static_offset])#=======Trail:烟花轨迹,本质上是一个点。创建Trail类,定义show方法绘制轨迹、get_pos实时获取轨迹坐标====classTrail:def__init__(self,n,size,dynamic):self.pos_in_line=nself.pos=vector(-10,-10)self.dynamic=dynamicifself.dynamic:self.colour=trail_colours[n]self.size=int(size-n/2)else:self.colour=(255,255,200)self.size=size-2ifself.size<0:self.size=0defget_pos(self,x,y):self.pos=vector(x,y)defshow(self,win):pygame.draw.circle(win,self.colour,(int(self.pos.x),int(self.pos.y)),self.size)defupdate(win,fireworks):forfwinfireworks:fw.update(win)iffw.remove():fireworks.remove(fw)pygame.display.update()#=======================主函数=======================defmain():pygame.init()pygame.font.init()pygame.display.set_caption("祝您新年快乐")#标题background=pygame.image.load("./5.png")#背景sound_wav=pygame.mixer.music.load("2.mp3")pygame.mixer.music.play()pygame.init()#加载背景音乐'''pygame.mixer.music.load("./res/音乐文件名")#循环播放背景音乐pygame.mixer.music.play(-1)#停止背景音乐pygame.mixer.music.stop()#加载音效boom_sound=pygame.mixer.Sound("./res/音效名")#播放音效boom_sound.play()boom_sound.stop()myfont=pygame.font.Font("simkai.TTF",80)myfont1=pygame.font.Font("simkai.ttf",30)testsurface=myfont.render("虎虎生威",False,(0,0,0),(220,20,60))testsurface1=myfont1.render("",False,(251,59,85))'''#pygame.image.load("")win=pygame.display.set_mode((DISPLAY_WIDTH,DISPLAY_HEIGHT))#win.blit(background)clock=pygame.time.Clock()fireworks=[Firework()foriinrange(2)]#createthefirstfireworksrunning=Truewhilerunning:clock.tick(60)foreventinpygame.event.get():ifevent.type==pygame.QUIT:running=Falseifevent.type==pygame.KEYDOWN:#Changegamespeedwithnumberkeysifevent.key==pygame.K_1:#按下1fireworks.append(Firework())ifevent.key==pygame.K_2:#按下2加入10个烟花foriinrange(10):fireworks.append(Firework())ifevent.key==pygame.K_3:#按下3加入100个烟花foriinrange(100):fireworks.append(Firework())win.fill((20,20,30))#drawbackground#win.blit(background,(0,0))#win.blit(testsurface,(200,30))#win.blit(testsurface1,(520,80))ifrandint(0,20)==1:#创建新的烟花fireworks.append(Firework())update(win,fireworks)pygame.quit()quit()if__name__=='main':main()

感谢你能够认真阅读完这篇文章,希望小编分享的“Python如何实现浪漫烟花效果”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!