用Python如何实现的代码雨
不懂用Python如何实现的代码雨?其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。
1. 数字
首先,我们来实现数字雨,我们需要创建一个窗口来显示内容,窗口的创建使用 pygame 库,代码实现如下:
FONT_PX=15pygame.init()winSur=pygame.display.set_mode((500,600))font=pygame.font.SysFont('fangsong',20)bg_suface=pygame.Surface((500,600),flags=pygame.SRCALPHA)pygame.Surface.convert(bg_suface)bg_suface.fill(pygame.Color(0,0,0,13))winSur.fill((0,0,0))#数字texts=[font.render(str(i),True,(0,255,0))foriinrange(10)]colums=int(500/FONT_PX)drops=[0foriinrange(colums)]whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:exit()pygame.time.delay(33)winSur.blit(bg_suface,(0,0))foriinrange(len(drops)):text=random.choice(texts)winSur.blit(text,(i*FONT_PX,drops[i]*FONT_PX))drops[i]+=1ifdrops[i]*10>600orrandom.random()>0.95:drops[i]=0pygame.display.flip()
实现效果如下:
2. 字母
接着,我们再来实现字母雨,实现方式基本就是将上面实现数字雨的数字换成字母,代码实现如下:
PANEL_width=400PANEL_highly=500FONT_PX=15pygame.init()#创建一个窗口winSur=pygame.display.set_mode((PANEL_width,PANEL_highly))font=pygame.font.SysFont('123.ttf',22)bg_suface=pygame.Surface((PANEL_width,PANEL_highly),flags=pygame.SRCALPHA)pygame.Surface.convert(bg_suface)bg_suface.fill(pygame.Color(0,0,0,28))winSur.fill((0,0,0))letter=['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m']texts=[font.render(str(letter[i]),True,(0,255,0))foriinrange(26)]#按窗口的宽度来计算可以在画板上放几列坐标并生成一个列表column=int(PANEL_width/FONT_PX)drops=[0foriinrange(column)]whileTrue:#从队列中获取事件foreventinpygame.event.get():ifevent.type==pygame.QUIT:exit()elifevent.type==pygame.KEYDOWN:chang=pygame.key.get_pressed()if(chang[32]):exit()#暂停给定的毫秒数pygame.time.delay(30)#重新编辑图像winSur.blit(bg_suface,(0,0))foriinrange(len(drops)):text=random.choice(texts)#重新编辑每个坐标点的图像winSur.blit(text,(i*FONT_PX,drops[i]*FONT_PX))drops[i]+=1ifdrops[i]*10>PANEL_highlyorrandom.random()>0.95:drops[i]=0pygame.display.flip()
实现效果如下:
3. 图片
最后,我们使用图片来实现这一效果,图片我们就使用雨滴吧,这里我们使用 tkinter 创建窗口,代码实现如下:
#初始雨滴纵坐标INIT_HEIGHT=10#雨滴创建defrainmake(canvas,imagefile):rainlist=[]foriinrange(5):#根据图片,创建一排雨滴rainlist.append(canvas.create_image(100+80*i,INIT_HEIGHT,anchor=NE,image=imagefile))returnrainlist#雨滴下落defraindown(tk,canvas,imagefile,sec):#线程间等待time.sleep(sec)rainlist=rainmake(canvas,imagefile)#每个雨滴的纵坐标值height=[INIT_HEIGHT]*10whileTrue:#每次移动前稍等一会time.sleep(0.2)#5个雨滴一起移动foriinrange(5):#如果雨滴字到底了,则不继续移动ifnotheight[i]==0:#设置下落步调rnd=random.randint(5,50)canvas.move(rainlist[i],0,rnd)height[i]=height[i]+rndtk.update()fori,hinenumerate(height):ifh>400:#当雨滴字走到最下方,则删除canvas.delete(rainlist[i])tk.update()#清空该雨滴的heightheight[i]=0print(i,h,height)#全到底,则跳出循环ifheight==[0]*5:print('break:',threading.current_thread().name)breakdeflookloop(tk,canvas,thread):aliveflg=FalsewhileTrue:#5s检测一次time.sleep(5)forthinthread:ifth.is_alive():aliveflg=Trueelse:aliveflg=Falseifaliveflg==False:breakcanvas.create_text(100,200,text='雨停了...',fill='red')canvas.pack()time.sleep(5)tk.destroy()
实现效果如下:
感谢你能够认真阅读完这篇文章,希望小编分享用Python如何实现的代码雨内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。