1. 首页 » 生活常识

10分钟用Python绘制贪吃蛇小游戏

贪吃蛇是一款经典的益智游戏,有PC和手机等多种版本,既简单又耐玩。玩家通过

上下左右键控制蛇的方向,寻找食物,每吃到一次食物,就能得到一定的积分,而且蛇的身体会越来越长。随着蛇的身体变长,游戏的难度就会变大。当蛇碰到四周的墙壁,或者碰到自己的身体的某一个部位的时候,游戏就结束了。

我们来看一下用Python编写这款游戏的主要思路。带上娃一起编程既好玩又增长知识。

如何用Python10分钟绘制贪吃蛇小游戏?

地图

我们将整个游戏界面看成是由许多个小方块组成的,每个方块代表一个单位。这样一来,游戏界面就由若干个小方块形成一个地图,地图上的每个位置都可以表示为小方块的整数倍,如图1所示。

如何用Python10分钟绘制贪吃蛇小游戏?

图1

贪吃蛇的长度也用这个小方块来表示,每次吃到食物,蛇身的长度就会增加一个单位。

程序界面

这是一款完整的游戏,所以我们一共为其设计了3个界面,除了游戏界面以外,还包括游戏开始界面和游戏结束界面。

自定义函数

我们要创建的函数包括:main(主程序)、startGame(游戏开始)、runGame(运行游戏)、drawFood(绘制食物)、drawSnake(绘制贪吃蛇)、drawScore(绘制成绩)、moveSnake(移动贪吃蛇)、isEattingFood(是否吃到食物)、isAlive(判断贪吃蛇是否死掉了)、gameOver(游戏结束)和terminate(终止游戏)。

事件

我们要用到的事件是键盘事件。键盘事件是玩家操控贪吃蛇移动的时候发生的事件。我们会在后面介绍的startGame函数和gameOver函数中监听键盘事件,并且根据事件类型,来做相应的处理。

声音

我们会在游戏开始后,调用Sound对象的play方法,播放的背景音乐。

《Python少儿趣味编程》

扫码查看详情

导入模块

首先,将在程序中用到的模块都导入。我们要使用Pygame的函数,因此需要导入Pygame模块。除此之外,我们还会用到sys模块和random模块。sys模块负责程序与Python解释器的交互,用于操控Python运行时的环境,程序要使用sys模块的exit函数来退出游戏。random模块用于生成随机数。导入这3个模块的语句如下所示:

1import pygame

2import random

3import sys

初始化设置

为了进行游戏启动和运行前的准备工作,程序需要做一些初始化设置工作,包括定义程序要用到的颜色、方向变量,确定游戏窗口和地图的大小,定义游戏需要用到的一些其他变量等。先来看看这部分初始化代码。

定义颜色变量

游戏中要用到的颜色主要包括如下几种。

1WHITE = (255, 255, 255)

2GREEN = (0, 255, 0)

3DARKGREEN = (0, 185, 0)

4YELLOW = (255,255,0)

定义方向变量

为了能够让玩家能够操控贪吃蛇的方向,我们在程序中定义了4个方向变量,分别和玩家操控贪吃蛇移动的上下左右相对应。

1UP = 1

2DOWN = 2

3LEFT = 3

4RIGHT = 4

定义窗口大小

我们要为贪吃蛇游戏定义一个窗口,让贪吃蛇在这个窗口中移动。我们通过两个变量来定义窗口的宽和高,这是一个宽800像素、高600像素的矩形窗口。

1windowsWidth = 800

2windowsHeight = 600

定义地图大小

我们使用变量mapWidth 和mapHeight 来表示地图的宽和高。需要注意的是,地图的宽和高都是基础单位cellSize的整数倍。

1cellSize = 20 #定义基础单位大小

2mapWidth = int(windowsWidth / cellSize) #地图的宽

3mapHeight = int(windowsHeight / cellSize) #地图的高

其他变量

程序还会用到如下两个变量:

1HEAD = 0 #贪吃蛇头部下标

2snakeSpeed = 7 #贪吃蛇的速度

基础函数

程序最终要以通过函数来定义所要执行的功能,并且通过函数调用来完成和实现这些功能。前面介绍了贪吃蛇这款游戏需要定义的函数,这些函数是游戏程序的核心代码,接下来,我们依次来看看这些函数是如何实现的。

main函数

main函数是程序执行的入口。先来看一下main函数的详细代码。

1 def main: #入口函数,程序从这里开始运行

2 pygame.init # 模块初始化

3 screen = pygame.display.set_mode((windowsWidth, windowsHeight))

4 pygame.display.set_caption("贪吃蛇")

5 screen.fill(WHITE)

6 snakeSpeedClock = pygame.time.Clock

7

8 startGame(screen) #游戏开始

9

10 while True:

11 music=pygame.mixer.Sound("snake.wav")

12 music.play(-1)

13 runGame(screen, snakeSpeedClock)

14 music.stop

15 gameOver(screen) #游戏结束

首先,初始化Pygame,调用pygame.init函数进行模块初始化。然后调用了pygame.display.set_mode函数,创建了一个宽800像素、高600像素的显示窗口,返回了用于该窗口的pygame.Surface 对象并将其存储在名为screen的变量中。接下来,调用pygame.display.set_caption函数来设置窗口的标题,这里给游戏窗口起名为“贪吃蛇”。调用screen.fill函数,将窗口用白色填充。然后创建了一个时钟(Clock)对象,将其赋值给snakeSpeedClock变量,用它来控制帧速率。

然后,调用startGame这个自定义函数,这是负责启动游戏的函数,给它传递的参数是变量screen,后面的小节会详细介绍这个函数。

接下来,为了保持Pygame事件循环一直运行,我们使用while循环,并且循环条件就是布尔值True,这表示循环会一直进行,而退出这个循环的唯一方式是程序终止。在本书前面的示例中,我们通常都会使用一个变量作为循环条件,当程序退出时,修改这个变量来结束循环。这两种做法的效果是相同的,相比之下,这里的用法要更加简单一些。

在循环体中,我们先初始化混合器,然后将一段背景音乐snake.wav加载到一个Sound对象中,并且将其存储到变量music中。接下来调用play函数播放音乐,参数−1表示会一直循环播放。通过上述代码,我们就为游戏添加了背景音乐。然后调用runGame函数,传递给它的参数是变量screen和snakeSpeedClock,这个函数负责游戏运行,后面的小节还会详细介绍这个函数。当这个函数执行完后,就会调用music.stop函数来停止背景音乐播放。然后,调用gameOver函数结束游戏,传递给它的参数是变量screen。

startGame函数

这个函数负责控制我们的程序启动,它接收的参数是窗口的pygame.Surface对象。我们来看一下该函数的代码。

1def startGame(screen):

2 gameStart = pygame.image.load("gameStart.png")

3 screen.blit(gameStart, (70, 30))

4

5 font = pygame.font.SysFont("SimHei", 40)

6 tip = font.render("按任意键开始游戏", True, (65, 105, 225))

7 screen.blit(tip, (240, 550))

8

9 pygame.display.update

10

11 while True: #键盘监听事件

12 for event in pygame.event.get: #关闭窗口

13 if event.type == pygame.QUIT:

14 terminate

15 elif event.type == pygame.KEYDOWN:

16 if (event.key == pygame.K_ESCAPE): #按下ESC键

17 terminate

18 else:

19 return

首先,调用image函数在Pygame窗口中加载“gameStart.png”图片,并创建一个名为gameStart的Surface对象。然后,调用blit函数,将像素从一个Surface复制到另一个Surface之上。就是把gameStart对象复制到Screen这个Surface上。通过blit将gameStart复制到指定位置(70, 30)。

然后,调用pygame.font.SysFont函数来创建Font对象,并将其赋值给名为font的变量,这个对象允许我们以40点的SimHei字体绘制到Pygame的Surface上。接下来,在所创建的font对象上使用render命令,把字符串“按任意键开始游戏”绘制到Surface上。然后,调用blit函数,将像素从一个Surface复制到另一个Surface之上。screen.blit(tip, (240, 550))负责把tip对象复制到screen这个Surface上的指定位置。

调用pygame.display.update函数,把绘制到Surface对象上的所有内容都显示到窗口上。

接下来,为了保持Pygame事件循环一直运行,我们使用while循环。在事件循环中,判断事件类型如果是QUIT,就调用terminate函数终止程序,我们稍后会介绍terminate函数。否则,如果事件类型是KEYDOWN,那么事件对象将有一个key属性来识别按下的是哪个键。如果key属性等于K_ESCAPE,表示用户按下的是Esc键,意味着玩家希望结束程序,那么程序的处理方式和点击关闭窗口一样,调用terminate函数终止程序。否则,表示用户按下的是其他键,退出这个函数,表示游戏开始运行。

当这个函数执行后,会出现如图1所示的游戏界面,这个时候,玩家可以按Esc键关闭程序,如果按其他的任意键则会开始玩游戏。

runGame函数

这个函数控制着游戏程序运行,它接受的参数是窗口的pygame.Surface对象和Pygame的时钟对象。runGame函数的代码如下所示:

1def runGame(screen,snakeSpeedClock):

2 startX = random.randint(3, mapWidth - 8)

3 startY = random.randint(3, mapHeight - 8)

4 snakeCoords = [{"x": startX, "y": startY},

5 {"x": startX - 1, "y": startY},

6 {"x": startX - 2, "y": startY}]

7

8 direction = RIGHT

9

10 food = {"x": random.randint(0, mapWidth - 1), "y": random.randint(0, mapHeight - 1)}

11

12 while True:

13 for event in pygame.event.get:

14 if event.type == pygame.QUIT:

15 terminate

16 elif event.type == pygame.KEYDOWN:

17 if event.key == pygame.K_LEFT and direction != RIGHT:

18 direction = LEFT

19 elif event.key == pygame.K_RIGHT and direction != LEFT:

20 direction = RIGHT

21 elif event.key == pygame.K_UP and direction != DOWN:

22 direction = UP

23 elif event.key == pygame.K_DOWN and direction != UP:

24 direction = DOWN

25 elif event.key == pygame.K_ESCAPE:

26 terminate

27

28 moveSnake(direction, snakeCoords) #移动贪吃蛇

29

30 isEattingFood(snakeCoords, food) #判断贪吃蛇是否吃到食物

31

32 ret = isAlive(snakeCoords) #判断贪吃蛇是否还活着

33 if not ret:

34 break #贪吃蛇已经死了,游戏结束

35

36 gameRun = pygame.image.load("background.png")

37 screen.blit(gameRun, (0, 0))

38 drawFood(screen, food)

39 drawSnake(screen, snakeCoords)

40 drawScore(screen, len(snakeCoords) - 3)

41

42 pygame.display.update

43 snakeSpeedClock.tick(snakeSpeed) #控制帧速率

首先使用random.randint函数在3到mapWidth−8之间选取一个随机整数赋值给变量startX,在3到mapHeight−8之间选取一个随机整数赋值给变量startY,这两个变量分别表示贪吃蛇初始的x坐标和y坐标。选取随机数的目的是让贪吃蛇出现的位置不是固定的,这样就增加了游戏的不确定性。

然后,用嵌套字典的一个列表来表示贪吃蛇。每个字典表示地图上的一个坐标,{'x': startX, 'y': startY}表示蛇头的位置,{'x': startX - 1, 'y': startY}和{'x': startX - 2, 'y': startY}表示蛇的身体。这是一条水平放置的蛇,蛇头靠右,有两节蛇身。

将direction设置为RIGHT,表示方向向右。RIGHT是我们前面定义过的方向变量。

然后使用random.randint函数在0到mapWidth−1之间选取一个随机整数作为字典中x键的值,在0到mapHeight−1之间选取一个随机整数作为字典中y键的值,将字典赋值给变量food。用这个变量表示食物的坐标位置。

接下来,为了保持Pygame事件循环一直运行,我们使用while循环。在事件循环中,判断事件类型,如果是QUIT,那么调用terminate函数终止程序。否则,如果事件类型是KEYDOWN,那么事件对象将有一个key属性来识别按下的是哪个键。

如果key属性等于K_LEFT,表示用户按下的是向左方向键,并且direction != RIGHT,那么将变量direction设置为LEFT,也就是将方向设置为向左。这里,direction != RIGHT的含义是蛇头不向右,因为蛇头向右的话,是没有办法再将方向设置为向左的(因为要避免贪吃蛇直接掉头导致头部和身体相碰撞的情况),只有蛇头向上、向下或向左的时候,我们才可以将蛇头方向设置为向左。

如果key属性等于K_RIGHT,并且direction != LEFT,那么将变量direction设置为RIGHT;如果key属性等于K_UP,并且direction != DOWN,那么将变量direction设置为UP;如果key属性等于K_DOWN,并且direction !=UP,那么将变量direction设置为DOWN。

如果key属性等于K_ESCAPE,表示用户按下的是Esc 键,意味着玩家希望结束程序,那么处理方式和玩家点击关闭窗口是一样的,调用terminate函数终止程序。

然后,调用moveSnake函数移动贪吃蛇,该函数的参数是变量direction和snakeCoords,稍后我们还会详细介绍moveSnake函数。

接下来调用isEattingFood函数,判断贪吃蛇是否吃到食物,该函数参数是变量snakeCoords和 food,稍后我们还会详细介绍isEattingFood函数。

然后调用isAlive函数,判断贪吃蛇是否死亡,该函数的参数是变量snakeCoords,并且将它的返回结果赋值给变量ret,稍后会详细介绍isAlive函数。判断变量ret是否是True,如果不是,跳出while循环,表示贪吃蛇已经死了,游戏结束。

调用image.load函数加载游戏背景图片,并创建一个名为gameRun的Surface对象。调用blit函数,把gameRun对象复制到screen这个Surface上,指定位置是左上角。

然后调用drawFood函数绘制食物,该函数的参数是变量screen和food,稍后我们还会介绍drawFood函数。

然后调用drawSnake函数绘制贪吃蛇,该函数的参数是变量screen和snakeCoords,稍后我们还会详细介绍drawFood函数。

接下来调用drawScore函数绘制分数,该函数的参数是变量screen和len(snakeCoords) – 3的结果。len(snakeCoords)表示贪吃蛇的长度。减去3,是因为贪吃蛇最初有一个蛇头和两节身体,也就是snakeCoords初始有3个元素,减去3就是新增的身体部分,也就是相应的得分。

调用pygame.display.update函数,把绘制到Surface对象上的所有内容,都显示到窗口上。调用时钟对象的tick方法,表示游戏运行的帧速率是snakeSpeed FPS,即每秒snakeSpeed次。

当runGame函数执行后,会出现如图3所示的游戏界面。

如何用Python10分钟绘制贪吃蛇小游戏?

图3

下面分别介绍一下runGame函数中用到的其他的自定义函数。

drawFood函数

drawFood函数用来绘制食物,它接受的参数是窗口的pygame.Surface对象和表示坐标的字典对象。drawFood函数的代码如下所示。

1def drawFood(screen, food):

2 x = food["x"] * cellSize

3 y = food["y"] * cellSize

4 pygame.draw.rect(screen, YELLOW, (x, y, cellSize, cellSize))

将字典food的键“x”对应的值乘以变量cellSize的结果赋值给变量x,将字典food的键“y”对应的值乘以变量cellSize的结果赋值给变量y。因为food的坐标是相对于地图上的坐标,而不是真正窗口的坐标,只有在乘以cellSize后才能够得到窗口上对应的像素位置。然后,调用pygame.draw.rect函数绘制用黄色填充的一个小方块。

drawSnake函数

drawSnake函数用来绘制贪吃蛇,它接受的参数是窗口的pygame.Surface对象和表示贪吃蛇的列表。drawSnake函数的代码如下所示。

1def drawSnake(screen, snakeCoords):

2 for coord in snakeCoords:

3 x = coord["x"] * cellSize

4 y = coord["y"] * cellSize

5 pygame.draw.rect(screen, DARKGREEN, (x, y, cellSize, cellSize))

6 pygame.draw.rect(screen, GREEN,(x + 4, y + 4, cellSize - 8, cellSize - 8))

用一个for循环来遍历snakeCoords列表中所有的元素,把每个元素赋值给变量coord。

在每个循环体中,将字典coord的键“x”对应的值乘以变量cellSize,再把结果赋值给变量x,将字典coord的键“y”对应的值乘以变量cellSize,再把结果赋值给变量y。变量x和y对应的是窗口上的像素位置。然后调用pygame.draw.rect函数绘制一个用深绿色填充的小方块,再次调用pygame.draw.rect函数在深绿色方块中绘制一个浅绿色的小方块。一个大方块和一个小方块,一起构成了蛇的一节身体。

drawScore函数

drawScore函数用来绘制分数,它接受的参数是窗口的pygame.Surface对象和表示分数的变量。drawScore函数的代码如下所示。

1def drawScore(screen,score):

2 font = pygame.font.SysFont("SimHei", 30)

3 scoreSurf = font.render("得分: " + str(scoer), True, WHITE)

4 scoreRect = scoreSurf.get_rect

5 scoreRect.topleft = (windowsWidth - 200, 50)

6 screen.blit(scoreSurf, scoreRect)

调用pygame.font.SysFont函数,把字符串"得分:"以及变量score的值绘制到界面上,以抗锯齿方式绘制,文本颜色为白色,将生成的这个Font对象赋值给变量scoreSurf。然后获取scoreSurf的矩形对象并将其赋值给变量scoreRect。指定scoreRect的左上角的坐标为(windowsWidth - 200, 50)。然后,调用blit函数,把scoreSurf对象复制到screen这个Surface上。

moveSnake函数

moveSnake函数用来移动贪吃蛇,它接受的参数是表示方向的变量和表示贪吃蛇的列表。moveSnake函数会根据方向,来增加一个蛇头的元素到列表中。moveSnake函数的代码如下所示。

1def moveSnake(direction, snakeCoords):

2 if direction == UP:

3 newHead = {"x": snakeCoords[HEAD][ "x"], "y": snakeCoords[HEAD][ "y"] - 1}

4 elif direction == DOWN:

5 newHead = {"x": snakeCoords[HEAD][ "x"], "y": snakeCoords[HEAD][ "y"] + 1}

6 elif direction == LEFT:

7 newHead = {"x": snakeCoords[HEAD][ "x"] - 1, "y": snakeCoords[HEAD][ "y"]}

8 elif direction == RIGHT:

9 newHead = {"x": snakeCoords[HEAD][ "x"] + 1, "y": snakeCoords[HEAD][ "y"]}

10

11 snakeCoords.insert(0, newHead)

如果变量direction等于UP,表示贪吃蛇的方向是向上,那么创建一个新的蛇头元素,“x”键的值是原来蛇头的“x”键的值不变,“y”键的值是原来蛇头的“y”键的值减去1个单位。

否则,如果变量direction等于DOWN,表示贪吃蛇的方向是向下,那么创建一个新的蛇头元素,“x”键的值是原来蛇头的“x”键的值不变,“y”键的值是原来蛇头的“y”键的值加上1个单位。

否则,如果变量direction等于LEFT,表示贪吃蛇的方向是向左,那么创建一个新的蛇头元素,“x”键的值是原来蛇头的“x”键的值减去1个单位,“y”键的值是原来蛇头的“y”键的值不变。

否则,如果变量direction等于RIGHT,表示贪吃蛇的方向是向右,那么创建一个新的蛇头元素,“x”键的值是原来蛇头的“x”键的值加上1个单位,“y”键的值是原来蛇头的“y”键的值不变。

然后,把这个新创建的字典元素插入到贪吃蛇列表的第一个位置。

isEattingFood函数

isEattingFood函数用来判断贪吃蛇是否吃到了食物,它接受的参数是表示贪吃蛇的列表和表示食物位置的变量。isEattingFood函数的代码如下所示。

1def isEattingFood(snakeCoords, food):

2 if snakeCoords[HEAD]["x"] == food["x"] and snakeCoords[HEAD]["y"] == food["y"]:

3 food["x"] = random.randint(0, mapWidth - 1)

4 food["y"] = random.randint(0, mapHeight - 1)

5 else:

6 del snakeCoords[-1]

首先判断列表snakeCoords的第一个元素的“x”键和“y”键的值是否等于变量food的“x”键和“y”键的值。变量HEAD等于0。

如果相等,表示蛇头碰到了食物。那么重新设置变量food的“x”键和“y”键的值。请注意,对于列表或字典,在函数内修改参数的内容,会影响到函数之外的对象。

如果不相等,删除snakeCoords列表中最后一个元素。在介绍moveSnake函数的时候提到过,移动贪吃蛇,其实就是增加一个新的元素。例如,最初是3个元素,向右移动一步,就变成了4个元素。如果这个时候没有吃到食物,那么为了保证元素数量不变,就要删除最后一个元素,这样才能确保snakeCoords列表中的元素数量没有变化,仍然是3个元素。

isAlive函数

isAive函数用来判断贪吃蛇是否死亡,它接受的参数是表示贪吃蛇的列表。isAive函数的代码如下所示。

1def isAlive(snakeCoords):

2 tag = True

3 if snakeCoords[HEAD]["x"] == -1 or snakeCoords[HEAD]["x"] == mapWidth or snakeCoords[HEAD]["y"] == -1 or snakeCoords[HEAD]["y"] == mapHeight:

4 tag = False # 贪吃蛇碰壁

5 for snake_body in snakeCoords[1:]:

6 if snake_body["x"] == snakeCoords[HEAD]["x"] and snake_body["y"] == snakeCoords[HEAD]["y"]:

7 tag = False # 贪吃蛇碰到自己身体

8 return tag

首先,将变量tag设置为True。然后,判断在地图上的蛇头的x坐标是否等于−1,或者蛇头的x坐标是否等于mapWidth,或者蛇头的y坐标是否等于−1,或者蛇头的y坐标是否等于mapHeight,只要满足其中的任何一个条件,就表示蛇头碰到了墙壁,那么就将变量tag设置为False。

然后用一个for循环,来遍历snakeCoords列表中的第2个元素以及之后的元素,把每个元素赋值给变量snake_body,表示蛇的身体。

在循环体内,判断字典snake_body的键“x”和“y”对应的值是否等于snakeCoords列表第一个元素,也就是蛇头的键“x”和“y”对应的值,如果相等,表示蛇头碰到了蛇的身体,那么就将变量tag设置为False。

最后,该函数返回了变量tag。如果tag是True,表示蛇还活着;如果tag是False,表示蛇死掉了。

gameOver函数

gameOver函数控制整个程序的结束,它接受的参数是窗口的pygame.Surface对象。gameOver函数的代码如下所示。

1def gameOver(screen):

2 #加载游戏结束图片

3 screen.fill(WHITE)

4 gameOver = pygame.image.load("gameover.png")

5 screen.blit(gameOver, (0, 0))

6 #加载游戏结束提示信息

7 font = pygame.font.SysFont("SimHei", 36)

8 tip = font.render("按Q或者ESC退出游戏, 按其他键重新开始游戏", True, (65, 105, 225))

9 screen.blit(tip, (30, 500))

10 #显示Surface对象上的内容

11 pygame.display.update

12

13 while True:

14 for event in pygame.event.get:

15 if event.type == pygame.QUIT:

16 terminate

17 elif event.type == pygame.KEYDOWN:

18 if event.key == pygame.K_ESCAPE or event.key == pygame.K_q:

19 terminate

20 else:

21 return #结束此函数, 重新开始游戏

首先调用screen.fill函数,用白色填充窗口。

然后调用image函数在Pygame窗口中加载“gameover.png”图片,并创建一个名为gameOver的Surface对象。然后我们调用blit函数,把gameOver对象复制到screen这个Surface上。通过blit将gameOver复制到指定左上角位置(0, 0)。

然后调用pygame.font.SysFont函数,把字符串"按Q或者ESC退出游戏,按其他键重新开始游戏"绘制到界面上。然后我们调用blit函数把tip对象复制到screen这个Surface上。

调用pygame .display.update函数,把绘制到Surface对象上的所有内容,都显示到窗口上。

接下来,使用while循环监听键盘事件。在事件循环中,判断事件类型,如果是QUIT,那么调用terminate函数终止程序。否则,如果事件类型是KEYDOWN,那么事件对象将有一个key属性来识别按下的是哪个键。如果key属性等于K_ESCAPE或K_q,表示用户按下的是Esc或Q键,意味着玩家希望结束程序,那么处理方式和点击关闭窗口是一样的,调用terminate函数终止程序。否则,表示用户按下的是其他键,结束这个函数,重新开始游戏。

当这个函数执行后,会出现如图4所示的游戏界面,这个时候,可以按Q键和Esc键结束程序,也可以按任意键重新开始一局游戏。

如何用Python10分钟绘制贪吃蛇小游戏?

图4

terminate函数

terminate函数终止程序。我们来看一下该函数的代码。

1def terminate:

2 pygame.quit

3 sys.exit

调用pygame.quit函数,它是和init相对应的一个函数。在退出程序之前,需要调用它。然后才会退出Pygame。调用sys.exit函数,退出主程序退。

调用入口函数

最后,我们只要调用入口函数main,程序就可以开始运行了。

1main

到这里,我们的贪吃蛇游戏就完成了。这是一个真正意义上的完整游戏,有开始界面和结束界面,有游戏背景,还有背景音乐。尝试着玩一玩,然后再回过头来看看游戏的程序代码,这样会更有助于对代码的理解。

《Python少儿趣味编程》

李强 李若瑜 著

编辑推荐

● 少儿编程畅销图书作者精心编写 。

●全彩印刷, 提供代码和素材下载,方便亲子互动和少儿自学 。

Python简单易学,功能强大,是少儿学习编程的首选语言。本书是少儿学习Python编程的趣味指南,全书共17章,按照由简到难、逐步深入的方式组织各章内容。

本书精心选取内容,注重难易适度和趣味性,语言通俗易懂,代码示例丰富。在多章的末尾,还给出了一些练习题并给出了解答。本书适合想要学习Python编程基础的少儿(尤其是10岁以上的孩子)及想要教孩子学习编程的家长阅读,也适合少儿编程培训班的老师用作少儿编程培训的教材。

【END】

声明:本文由"麦兜"发布,不代表"破站"立场,转载联系作者并注明出处:https://www.848586.cn/37249.html