开发工具 Python版本:3。6。4 相关模块: pygame模块; 以及一些Python自带的模块。环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。原理简介 贪吃蛇的游戏规则应该不需要我多做介绍了吧TT。写个贪吃蛇游戏其实还是很简单的。首先,我们进行一下游戏初始化:pygame。init()screenpygame。display。setmode(cfg。SCREENSIZE)pygame。display。setcaption(GreedySnake微信公众号:Charles的皮卡丘)clockpygame。time。Clock()复制代码 然后定义一个贪吃蛇类:贪吃蛇类classSnake(pygame。sprite。Sprite):definit(self,cfg,kwargs):pygame。sprite。Sprite。init(self)self。cfgcfgself。headcoord〔random。randint(5,cfg。GAMEMATRIXSIZE〔0〕6),random。randint(5,cfg。GAMEMATRIXSIZE〔1〕6)〕self。tailcoords〔〕foriinrange(1,3):self。tailcoords。append(〔self。headcoord〔0〕i,self。headcoord〔1〕〕)self。directionrightself。headcolors〔(0,80,255),(0,255,255)〕self。tailcolors〔(0,155,0),(0,255,0)〕复制代码 其中headcoord用来记录蛇头所在位置,而tailcoords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过键来控制贪吃蛇的行动:按键检测foreventinpygame。event。get():ifevent。typepygame。QUIT:pygame。quit()sys。exit()elifevent。typepygame。KEYDOWN:ifevent。keyin〔pygame。KUP,pygame。KDOWN,pygame。KLEFT,pygame。KRIGHT〕:snake。setDirection({pygame。KUP:up,pygame。KDOWN:down,pygame。KLEFT:left,pygame。KRIGHT:right}〔event。key〕)复制代码 需要注意的是,贪吃蛇不能180大拐弯,只能90地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:设置方向defsetDirection(self,direction):assertdirectionin〔up,down,right,left〕ifdirectionup:ifself。headcoord〔1〕1!self。tailcoords〔0〕〔1〕:self。directiondirectionelifdirectiondown:ifself。headcoord〔1〕1!self。tailcoords〔0〕〔1〕:self。directiondirectionelifdirectionleft:ifself。headcoord〔0〕1!self。tailcoords〔0〕〔0〕:self。directiondirectionelifdirectionright:ifself。headcoord〔0〕1!self。tailcoords〔0〕〔0〕:self。directiondirection复制代码 然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:食物类classApple(pygame。sprite。Sprite):definit(self,cfg,snakecoords,kwargs):pygame。sprite。Sprite。init(self)self。cfgcfgwhileTrue:self。coord〔random。randint(0,cfg。GAMEMATRIXSIZE〔0〕1),random。randint(0,cfg。GAMEMATRIXSIZE〔1〕1)〕ifself。coordnotinsnakecoords:breakself。color(255,0,0)画到屏幕上defdraw(self,screen):cx,cyint((self。coord〔0〕0。5)self。cfg。BLOCKSIZE),int((self。coord〔1〕0。5)self。cfg。BLOCKSIZE)pygame。draw。circle(screen,self。color,(cx,cy),self。cfg。BLOCKSIZE22)随机生成一个食物appleApple(cfg,snake。coords)复制代码 在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:更新贪吃蛇defupdate(self,apple):根据指定的方向运动self。tailcoords。insert(0,copy。deepcopy(self。headcoord))ifself。directionup:self。headcoord〔1〕1elifself。directiondown:self。headcoord〔1〕1elifself。directionleft:self。headcoord〔0〕1elifself。directionright:self。headcoord〔0〕1判断是否吃到了食物ifself。headcoordapple。coord:returnTrueelse:self。tailcoordsself。tailcoords〔:1〕returnFalse复制代码 同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:appleApple(cfg,snake。coords)复制代码 最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时,游戏结束:判断游戏是否结束propertydefisgameover(self):if(self。headcoord〔0〕0)or(self。headcoord〔1〕0)or(self。headcoord〔0〕self。cfg。GAMEMATRIXSIZE〔0〕)or(self。headcoord〔1〕self。cfg。GAMEMATRIXSIZE〔1〕):returnTrueifself。headcoordinself。tailcoords:returnTruereturnFalse复制代码 并显示一下游戏结束界面:endInterface(screen,cfg)复制代码效果展示需要项完整目源的也可以点赞关注私信【源码】 经典吃豆豆小游戏原理简介效果展示 游戏简介: 玩家通过键控制游戏的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。 若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则游戏胜利,否则游戏失败。 逐步实现: Step1:定义游戏精灵类 首先,让我们先来明确一下该游戏需要哪些游戏精灵类。 墙类 食物类(即豆豆) 角色类 角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。 显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下: Step2:设计游戏地图 利用Step1中定义的游戏精灵类,我们就可以开始设计游戏地图了。由于时间有限,我只写了一个关卡的游戏地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴)。游戏地图的设计包括以下四方面内容: 创建墙 创建门(一开始关幽灵用的) image。gif 创建角色 创建食物 因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计游戏地图,要先创建完墙、门以及角色后再创建食物: Step3:设计游戏主循环 接下来开始设计游戏主循环。首先是初始化: 然后定义主函数: 其中startLevelGame函数用于开始某一关游戏,其源代码如下: showText函数用于在游戏结束或关卡切换时在游戏界面中显示提示性文字,其源代码如下: 文章到这里就结束了,感谢你的观看,记得点赞关注下篇文章分享消消乐小游戏为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,需要项目源的也可以点赞关注私信【源码】回馈每一个读者,希望能帮到你。