1。pgzeropython拥有丰富的各个领域的第三方库,pygame是python在游戏领域的应用库,可以用来开发各种游戏。但对于初学者来说,还是有一定门槛的。今天要给大家分享的pgzero(pygamezero)是在pygame的基础上进一步封装,使得设计游戏非常方便,特别适合少儿编程领域的教学,与scratch相辅相成。pgzeropipinstallpygamepipinstallpgzero2的安装。游戏设计的流程我们可以简单梳理一下开发一个简单的游戏需要的流程:游戏剧情设计游戏场景绘制(背景图片和声音)如何控制游戏的角色如何判断游戏的成败关卡设计三、pgzero基本pgzero游戏开发流程如下:游戏画面区域画面pgzero游戏界面窗口设置由全局变量和内置对象screen完成:窗口外观:WIDTH、HEIGHT和TITLE窗口清除:screen.clear()窗口背景色:screen.fill((red,green,blue))在窗口上绘制图像:screen.blit(image,(left,top))在窗口上绘制几何图案:screen.draw.line屏幕。draw.circle屏幕。draw.rect游戏角色Actor在pgzero中图片显示的所有元素都是由Actor类定义的。#'alien'表示外星人图片,默认为images/alien.png#(50,50)定义窗口显示的Actor位置alien=Actor('alien',(50,50))Actor的位置:Actor很重要属性和方法:其他属性同pygame.Rect外观:image,如alien.image='alien_hurt'位置:piex坐标值:x,y,设置位置:pos,left/right/top/bottomAngle:angleDrawf方法:draw()distance方法:Actor.distance_to(target)angle方法:Actor.angle_to(target)游戏渲染drawdraw游戏状态更新update游戏外部事件触发控件on_xxx_xxxpgzero提供常用鼠标键盘事件键盘按键信息是通过键盘的内置对象获取的,鼠标是通过鼠标获取的,如:keyboard.a#The'A'keykeyboard.left#Theleftarrowkeykeyboard.rshift#Therightshiftkeykeyboard.kp0#The'0'keyonthekeypadkeyboard.k_0#Themain'0'keymouse.LEFTmouse.RIGHTmouse.MIDDLE见https://pygame-zero.readthedocs.io/en/stable/hooks.html#mouse.WHEEL_DOWN键盘事件:on_key_down、on_key_up鼠标事件:on_mouse_down、on_mouse_up、on_mouse_move其他重要元素sound声音:支持wav和ogg,默认资源对象目录为./sounds#playsound./sounds/drum.wavsounds.drum.play()musicmusic:支持mp3,主要是时间较长的音频文件。资源对象目录默认./music#Playsound./music/drum.mp3music.play('drum')animationeffects动画,比如将角色移动到某个位置#animate(object,tween='linear',duration=1,on_finished=None,**targets)animate(alien,pos=(100,100))详情参见:https://pygame-zero.readthedocs.io/en/stable/builtins.html#Animations4。pgzero游戏实例了解pgzero的基本用法,下面举个例子来串联游戏编写和制作的过程。让我们在手机上模拟一个游戏FlappyBird。游戏简单操作说明在这款《FlappyBird》游戏中,玩家只需用一根手指来控制,点击并触摸屏幕,小鸟就会飞起来,继续点击会继续飞得更高。放松你的手指,它会很快下降。所以玩家要控制小鸟向前飞,然后注意避开途中高低不平的管道。[3]1.游戏开始后点击屏幕,记得断断续续的点击屏幕,不要让小鸟掉下来。2、尽量保持平和的心情,点菜时不要敲得太猛,尽量观鸟。3.比赛的得分是小鸟安全通过柱子而没有撞到柱子得1分。当然,打中了,直接就死了,而且只有一条命。pgzero游戏代码结构:importpgzrun#全局变量和初始化信息TITLE='xxx'WIDTH=400HEIGHT=500#绘制游戏元素defdraw():pass#更新游戏状态defupdate():pass#处理键盘事件defon_key_down():pass#处理键盘事件defon_mouse_down():pass#executepgzrun.go()importpgzrunimportrandomTITLE='FlappyBird'WIDTH=400HEIGHT=500#TheseconstantscontrolthedifficultyofthegameGAP=130GRAVITY=0.3FLAP_STRENGTH=6.5SPEED=3#birdbird=Actor('bird)bird.dead=Falsebird.score=0bird.vy=0storage={}storage['highscore']=0defreset_pipes():#设置随机高度pipe_gap_y=random.randint(200,HEIGHT-200)pipe_top.pos=(WIDTH,pipe_gap_y-GAP//2)pipe_bottom.pos=(WIDTH,pipe_gap_y+GAP//2)pipe_top=Actor('top',anchor=('left','bottom'))pipe_bottom=Actor('bottom',anchor=('left','top'))reset_pipes()#Setinitialpipepositions.defupdate_pipes():#继续移动列pipe_top.left-=SPEEDpipe_bottom.left-=SPEEDifpipe_top.right<0:reset_pipes()ifnotbird.dead:bird.score+=1ifbird.得分>storage['highscore']:storage['highscore']=bird.scoredefupdate_bird():#birddownuy=bird.vybird.vy+=GRAVITYbird.y+=(uy+bird.vy)/2bird.x=75#根据小鸟的死亡切换小鸟的形状ifnotbird.dead:ifbird.vy<-3:bird.image='bird2'else:bird.image='bird1'#判断小鸟死亡:是否触及柱子ifbird.colliderect(pipe_top)orbird.colliderect(pipe_bottom):bird.dead=Truebird.image='birddead'#小鸟超出边界初始化ifnot0
