每个程序员都有一个游戏梦,都想开发一款别人爱不释手的游戏。游戏开发引擎有很多,Unity3D、cocos2d、Egret、LayaBox、threeJs等。一次偶然的机会,在gitee上看到了一个好玩的贪吃蛇游戏。在程序员的自信和爱折腾的驱使下,我果断报名了。今天就和大家一起来看看Python游戏的开发吧。Python有一个游戏开发库pygame,可以非常简单方便的开发游戏。先来看看游戏的效果:游戏中有几个角色:Snake、Food、Stone。对于这三个字符,它们被描述为三个类。Snake,Food,StoneFood类需要做的是:初始化,移动,删除,扔食物importparamimportpygameimportrandom#Foodclass#method:place/remove#pointsin25classFood:def__init__(self):自己。rect=pygame.Rect(-25,0,25,25)self.allposX=[]self.allposY=[]forposinrange(25,param.SCREEN_X-25,25):self.allposX.append(pos)forposinrange(25,param.SCREEN_Y-25,25):self.allposY.append(pos)defremove(self):self.rect.x=-25defset(self,stone):ifself.rect.x<=-25:allpos=[]#posinrange(25,param.SCREEN_X-25,25):allpos.append(pos)self.rect在25~SCREEN_X-25之间不要太靠近墙.left=random.choice(self.allposX)self.rect.top=random.choice(self.allposY)如果stone.isContain(self.rect.left,self.rect.top):self.rect.left=-25self.set(石头)defmove(self):self.rect.x-=25Stone类需要做的是:初始化,生成墙,移动墙,添加墙,判断是否碰撞importparamimportpygameimportrandom#StoneObstacles#Points以50类Stone为单位:def__init__(self):self.body=[]self.allStoneHeigh=[]foryinrange(125,param.HALF_Y-50,param.STONE_WIDTH):self.allStoneHeigh.append(y)forxinrange(0,param.SCREEN_X,200):self.body.append(self.generateWall(x,True))self.body.append(self.generateWall(x,False))defaddOne(self):self.body.insert(0,self.generateWall)(param.SCREEN_X-param.STONE_WIDTH,True))self.body.insert(0,self.generateWall(param.SCREEN_X-param.STONE_WIDTH,False))defgenerateWall(self,left,isTop):height=random.choice(self.allStoneHeigh)top=0ifisTop:top=0else:top=param.SCREEN_Y-heightwall=[]foriinrange(0,height,50):wall.append(pygame.Rect(左,上+i,参数。STONE_WIDTH,参数。STONE_WIDTH))returnwalldefmovePixel(self,pixel):print(len(self.body))iflen(self.body)>0:forwallinself.body:对于墙中的石头:stone.left-=pixeliflen(self.body)>12:self.body.pop()defisContain(self,left,top):对于self.body中的墙:对于stoneRectinwall:if(stoneRect.left==leftorstoneRect.left==left-25)and(stoneRect.top==toporstoneRect.top==top-25):returnTrue返回FalseSnake:importpygameimportrandomimportparamfromstoneimportStone#Snakeclass#点数以25为单位classSnake(object):#初始化各种需要的属性【默认right/bodyblockx5开头】def__init__(self):self.direction=pygame.K_RIGHTself.body=[]forxinrange(5):self.addnode()#尽可能在前端添加蛇块defaddnode(self):left,top=(0,param.HALF_Y)如果self.body:left,top=(self.body[0].left,self.body[0].top)node=pygame.Rect(left,top,25,25)ifself.dirction==pygame.K_LEFT:node.left-=25elifself.dirction==pygame.K_RIGHT:node.left+=25elifself.dirction==pygame.K_UP:node.top-=25elifself.dirction==pygame.K_DOWN:node.top+=25self.body.insert(0,node)#删除最后一个块defdelnode(self):self.body.pop()#死亡判断defisdead(self,stone):#撞墙ifself.body[0].xnotinrange(param.SCREEN_X):returnTrueifself.body[0].ynotinrange(param.SCREEN_Y):returnTrue#撞自己ifself.body[0]inself.body[1:]:returnTrue#撞障碍物forrectinself.body:ifstone.isContain(rect.left,rect.top):return真的returnFalse#移动!defmove(self):self.addnode()self.delnode()#改变方向但是是左右、上下不能被逆向改变defchangedirection(self,curkey):LR=[pygame.K_LEFT,pygame.K_RIGHT]UD=[pygame.K_UP,pygame.K_DOWN]ifcurkey==self.dirction:self.move()ifcurkeyinLR+UD:if(curkeyinLR)and(self.dirctioninLR):returnif(curkeyinUD)and(self.dirctioninUD):returnself.dirction=curkeydefdeadAction(self,screen,clock):failedImg1=pygame.image.load('res/tail_up.png')failedImg2=pygame.image.load('res/tail_right.png')failedImg3=pygame.image.load('res/tail_down.png')failedImg4=pygame.image.load('res/tail_left.png')imgList=[failedImg1,failedImg2,failedImg3,failedImg4]imgList中的img计数=0:如果计数>=4,则计数+=1:breakscreen.blit(img,(350,300))clock.tick(2)pygame.display.update()有了3个物体之后,下一步就是如何控制它们并让它们移动。pygame库有一个时钟类Clock,通过设置Clock的帧率,来控制各个物体的移动速度,达到页面移动的效果clock=pygame.time.Clock()clock.tick(3)并添加一些美食计分功能,当分数达到一定数值后,触发升级,增加游戏难度。提高整个游戏的可玩性。为了提升游戏体验,加入了一些背景音乐、音效、死亡效果等,让整个游戏变得饱满。
