当前位置: 首页 > 后端技术 > Python

python下pygame的烟花播放及代码分析

时间:2023-03-26 14:12:18 Python

烟花绽放的时候很耀眼,突然想用Python做一个烟花。这个例子比较简单,先来看看效果图:第一步:导入模块importpygame,math,time,random,osfromsysimportexit第二步:定义相关的初始win(w=widthofwindow,h=height)WIN_W=2200WIN_H=1300定义时间,显示,频率t1=0.18#时间流量show_n=0show_frequency=0.0015#烟花绽放频率,值越大频率越高烟花颜色列表,color_list是随机的下面绘制=[[255,50,50],[50,255,50],[50,50,255],[255,255,50],[255,50,255],[50,255,255],[255,255,255]]初始化pygame和音乐混音器pygame.init()pygame.mixer.init()创建一个窗口,pygame.RESIZABLE窗口resizable和titlescreen=pygame.display.set_mode((WIN_W,WIN_H),pygame.RESIZABLE,32)pygame.display.set_caption("ColorfulFireworksShow")背景音乐,可自定义sound_wav=pygame.mixer.music.load("123.mp3")pygame.mixer.music.play()Fireworks=Fireworks,定义主类classFireworks():is_show=Falsex,y=0,0vy=0p_list=[]color=[0,0,0]v=0def__init__(self,x,y,vy,n=300,颜色=[0,255,0],v=10):self.x=xself.y=yself.vy=vyself.color=colorself.v=vforiinrange(n):self.p_list.append([random.random()*2*math.pi,0,v*math.pow(random.random(),1/3)])defagain(self):self.is_show=Trueself.x=random.randint(WIN_W//2-350,WIN_W//2+350)self.y=random.randint(int(WIN_H/2),int(WIN_H*3/5))self.vy=-40*(random.random()*0.4+0.8)-self.vy*0.2self.color=color_list[random.randint(0,len(color_list)-1).copy()n=len(self.p_list)self.p_list=[]foriinrange(n):self.p_list.append([random.random()*2*math.pi,0,self.v*math.pow(random.random(),1/3)])defrun(self):globalshow_nforpinself.p_list:p[1]=p[1]+(random.random()*0.6+0.7)*p[2]p[2]=p[2]*0.97如果p[2]<1.2:self.color[0]*=0.9999self.color[1]*=0.9999self.color[2]*=0.9999ifmax(self.color)<10orself.y>WIN_H+p[1]:show_n-=1self.is_show=Falsebreakself.vy+=10*t1self.y+=self.vy*t1烟花列表fk_list=[]fk_list.append(Fireworks(300,300,-20,n=100,color=[0,255,0],v=10))fk_list.append(烟花(300,300,-20,n=200,color=[0,0,255],v=11))fk_list.append(烟花(300,300,-20,n=200,颜色=[0,0,255],v=12))fk_list.append(烟花(300,300,-20,n=500,颜色=[0,0,255],v=12))fk_list.append(烟花(300,300,-20,n=600,color=[0,0,255],v=13))fk_list.append(烟花(300,300,-20,n=700,颜色=[255,0,0],v=15))fk_list.append(烟花(300,300,-20,n=800,color=[255,255,0],v=18))clock=pygame.time.Clock()烟花放送的主循环:#游戏主循环whileTrue:ifnotpygame.mixer.music.get_busy():pygame.mixer.music.play()foreventinpygame.event.get():#pygame这个必须少一个,否则退出还在循环ifevent.type==pygame.QUIT:exit()screen.fill((0,0,0))#Fireworksfori,fkinenumerate(fk_list):如果不是fk.is_show:fk.is_show=Falseifrandom.random()