资源描述
游戏分享:手把手教你用游戏分享:手把手教你用 PythonPython 编写编写贪吃蛇(一)贪吃蛇(一)2018.1.102018.1.10今天我们将分享用 Python 制作贪吃蛇游戏。来试着挑战一下自己吧!挑战一下自己吧!贪吃蛇游戏玩法贪吃蛇游戏玩法在贪吃蛇游戏中,玩家将控制一只不断在屏幕上四处行进的小蛇。玩家不能让小蛇减速,只能够控制小蛇的转向。每隔一段时间,屏幕上将出现一个红苹果,苹果的位置是随机的,玩家的目标是让小蛇吃到苹果。游戏开始的时候,蛇的长度很短,之后每一次吃到苹果,小蛇都会变长一点。当小蛇撞到屏幕的边缘时,游戏就结束了。下面,让我们一起用 Python 一步步制作贪吃蛇游戏吧!游戏网格游戏网格如果你之前玩过贪吃蛇游戏,你会发现苹果和小蛇的位置其实都是由网格线确定的。这些由网格线确定的小方格有它们自己的坐标系,如上图,最左上角的小方格坐标为(0,0),最右下角的坐标为(31,23)。初始代码初始代码1.#贪吃蛇游戏2.#关注码趣学院3.4.5.6.import random,pygame,sys7.from pygame.locals import*8.9.FPS=1510.WINDOWWIDTH=64011.WINDOWHEIGHT=48012.CELLSIZE=2013.assert WINDOWWIDTH%CELLSIZE=0,Window width must be amultiple of cell size.14.assert WINDOWHEIGHT%CELLSIZE=0,Window height must be amultiple of cell size.15.CELLWIDTH=int(WINDOWWIDTH/CELLSIZE)16.CELLHEIGHT=int(WINDOWHEIGHT/CELLSIZE)上面的代码设定了游戏的常量(constant variables),这些量在游戏进行的过程中将不会被改变。小方格的边长被储存在变量 CELLSIZECELLSIZE 中。assertassert 语句(第13,14 行)确保小方格的尺寸能够和游戏窗口完美契合。例如,如果变量CELLSIZECELLSIZE 为 10,而游戏窗口的宽 WINDOWWIDTHWINDOWWIDTH 和高 WINDOWHEIGHTWINDOWHEIGHT 都被设置为 15,那么整个游戏窗口只能放进 1.5 个小方格。assertassert 语句确保窗口中的小方格数量为整数。18.#R 红 G 绿19.WHITE=(255,20.BLACK=(0,21.RED=(255,22.GREEN=(0,B 蓝255,255)0,0)0,0)255,0)23.DARKGREEN=(0,155,0)24.DARKGRAY=(40,40,40)25.BGCOLOR=BLACK26.27.UP=up28.DOWN=down29.LEFT=left30.RIGHT=right31.32.HEAD=0#小蛇头部的索引(index)mainmain 函数函数34.def main():35.global FPSCLOCK,DISPLAYSURF,BASICFONT36.37.pygame.init()38.FPSCLOCK=pygame.time.Clock()39.DISPLAYSURF=pygame.display.set_mode(WINDOWWIDTH,WINDOWHEIGHT)40.BASICFONT=pygame.font.Font(freesansbold.ttf,18)41.pygame.display.set_caption(Wormy)42.43.showStartScreen()44.while True:45.runGame()46.showGameOverScreen()在贪吃蛇游戏程序中,我们把代码的主要部分放在一个叫做 runGamerunGame 的函数中。这是因为我们只想要展示一次游戏的开始界面(一段带有不断旋转的“Wormy”字样的动画),用 showStartScreenshowStartScreen 函数实现。接着我们将调用 runGamerunGame 函数来正式开始贪吃蛇游戏。这个函数将在玩家的小蛇超出窗口边缘或者撞到自身的时候返回(return)(即函数结束)。游戏结束时,我们需要调用 showGameOverScreenshowGameOverScreen 来展示游戏的结束界面。当这个函数返回的时候,whilewhile 循环重新进行,runGamerunGame 函数再次被调用,游戏重新开始。第 44 行的 whilewhile 循环将永远进行下去,直到程序被终止。独立的独立的 runGamerunGame 函数函数49.def runGame():50.#为小蛇设置一个随机的出发点51.startx=random.randint(5,CELLWIDTH-6)52.starty=random.randint(5,CELLHEIGHT-6)53.wormCoords=x:startx,y:starty,54.x:startx-1,y:starty,55.x:startx-2,y:starty56.direction=RIGHT57.58.#把苹果放在一个随机的位置59.apple=getRandomLocation()在游戏的开始,我们希望小蛇能够在一个随机的位置出现(但不要离窗口的边缘太近)。所以我们需要在变量 startxstartx 和 startystarty 中分别储存一个随机的坐标值。(注意:CELLWIDTHCELLWIDTH 和 CELLHEIGHTCELLHEIGHT 是窗口横向和竖向上小方格的数量,而不是小方格自己的宽度和高度)。在上面这段代码中,我们确定了游戏一开始时小蛇的长度和小蛇身体各部分的位置。小蛇的身体以字典(dictionary)的形式被储存起来。其中,头部坐标由变量startxstartx 和 startystarty 确定,剩下的两端则被放在头部左侧的两个方格中。小蛇每一段身体的横纵坐标被储存在字典的 x、y 键值(key)中。所有代表小蛇身体的字典被储存在名为 wormCoordswormCoords 的列表(list)中。小蛇的头部永远都是 wormCoordswormCoords 列表的第一个值 wormCoords0wormCoords0。为了让代码更具可读性,我们在代码的第 32 行设置了一个常量 HEADHEAD,它的值为 0,这样以来,我们就可以用 wormCoordsHEADwormCoordsHEAD来代替 wormCoords0wormCoords0。(未完待续)(未完待续)
展开阅读全文