快捷搜索:

100行python代码,轻松完成贪吃蛇小游戏

大年夜家小时刻都玩过饕餮蛇吧?小编小时刻可爱好拿爸妈的手机玩了,厉害着呢!本日,小编就来用100行代码实现一个简略单纯版的饕餮蛇。在网上,饕餮蛇教程蛮多的,但要安装蛮多库的,而且也不敷清晰,本日的代码对照短,而且理解起来或者说你变动起来要简单一些。终极会实现效果如下:

image

基础筹备

首先,我们必要安装pygame库,小编经由过程pip install pygame,很快就安装好了。在完成饕餮蛇小游戏的时刻,我们必要知道全部游戏分为四部分:

游戏显示:游戏界面、停止界面

饕餮蛇:头部、身段、食品判断、逝世亡判断

树莓:随机天生

按键节制:上、下、左、右

游戏显示

首先,我们来初始化pygame,定义颜色、游戏界面的窗口大年夜小、标题和图标等。

1# 初始化pygame

2pygame.init()

3fpsClock = pygame.time.Clock()

4# 创建pygame显示层

5playSurface = pygame.display.set_mode((600,460))#窗口大年夜小

6pygame.display.set_caption('Snake Game')#窗口名称

7# 定义颜色变量

8redColour = pygame.Color(255,0,0)

9blackColour = pygame.Color(0,0,0)

10whiteColour = pygame.Color(255,255,255)

11greyColour = pygame.Color(150,150,150)

游戏停止界面,我们会显示“Game Over!”和该局游戏所得分数,相关代码如下:

1# 定义gameOver函数

2def gameOver(playSurface,score):

3gameOverFont = pygame.font.SysFont('arial.ttf',54) #游戏停止字体和大年夜小

4gameOverSurf = gameOverFont.render('Game Over!', True, greyColour) #游戏停止内容显示

5gameOverRect = gameOverSurf.get_rect()

6gameOverRect.midtop = (300, 10) #显示位置

7playSurface.blit(gameOverSurf, gameOverRect)

8scoreFont = pygame.font.SysFont('arial.ttf',54) #得分环境显示

9scoreSurf = scoreFont.render('Score:'+str(score), True, greyColour)

10scoreRect = scoreSurf.get_rect()

11scoreRect.midtop = (300, 50)

12playSurface.blit(scoreSurf, scoreRect)

13pygame.display.flip() #刷新显示界面

14time.sleep(5) #休眠五秒钟自动退出界面

15pygame.quit()

16sys.exit()

饕餮蛇和树莓

我们必要将全部界面当作许多20*20的小方块,每个方块代表一个单位,蛇的长度用单位来表示,同时我们采纳列表的形式存储蛇的身段。同时, 我们都知道,树莓的位置是随机的。以是,我们必要让树莓呈现的位置是游戏界面中的随机位置,同时,每吃到一颗树莓,就必要从新天生一颗新的树莓,并且得分加1。相关初始化设置如下:

1snakePosition = [100,100] #饕餮蛇 蛇头的位置

2snakeSegments = [[100,100]] #饕餮蛇 蛇的身段,初始为一个单位

3raspberryPosition = [300,300] #树莓的初始位置

4raspberrySpawned = 1 #树莓的个数为1

5direction = 'right' #初始偏向为右

6changeDirection = direction

7score = 0 #初始得分

若何节制饕餮蛇的运动轨迹呢,那么就必要按键节制了。我们经由过程键盘的↑↓←→和WSAD来节制,假如想直接退出游戏,则可以经由过程Esc键。这里必要强调的是,饕餮蛇里面是不能反偏向运动,是以,我们必要进一步的增添限定前提:

1# 检测例如按键等pygame事故

2for event in pygame.event.get():

3if event.type == QUIT:

4pygame.quit()

5sys.exit()

6elif event.type == KEYDOWN:

7# 判断键盘事故

8if event.key == K_RIGHT or event.key == ord('d'):

9changeDirection = 'right'

10if event.key == K_LEFT or event.key == ord('a'):

11changeDirection = 'left'

12if event.key == K_UP or event.key == ord('w'):

13changeDirection = 'up'

14if event.key == K_DOWN or event.key == ord('s'):

15changeDirection = 'down'

16if event.key == K_ESCAPE:

17pygame.event.post(pygame.event.Event(QUIT))

18# 判断是否输入了反偏向

19if changeDirection == 'right' and not direction == 'left':

20direction = changeDirection

21if changeDirection == 'left' and not direction == 'right':

22direction = changeDirection

23if changeDirection == 'up' and not direction == 'down':

24direction = changeDirection

25if changeDirection == 'down' and not direction == 'up':

26direction = changeDirection

偏向设置好了,那么饕餮蛇蛇身变换怎么做啊?很简单,我们只必要根据偏向变换一下坐标即可。

1# 根据偏向移动蛇头的坐标

2if direction == 'right':

3snakePosition[0] += 20

4if direction == 'left':

5snakePosition[0] -= 20

6if direction == 'up':

7snakePosition[1] -= 20

8if direction == 'down':

9snakePosition[1] += 20

10# 增添蛇的长度

11snakeSegments.insert(0,list(snakePosition))

饕餮蛇游戏里面最紧张的便是食品判断和逝世亡判断。首先是食品判断,我们经由过程键盘按键来抉择饕餮蛇的走向,以便它能吃到树莓。若何判断饕餮蛇有没有吃到树莓呢?很简单,假如饕餮蛇蛇头的位置和树莓的位置重合了,也便是相同,那么饕餮蛇就吃到树莓了,否则没有。同时,一旦发生了树莓被吃的环境,立即从新随机天生一个新的树莓。相关代码如下:

1# 判断是否吃掉落了树莓

2if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:

3raspberrySpawned = 0

4 else:

5snakeSegments.pop() #若没有吃掉落树莓,需将着末一单位的蛇身提出列表,此处和蛇身移动时位置变换有关

6# 假如吃掉落树莓,则从新天生树莓

7if raspberrySpawned == 0:

8x = random.randrange(1,30) #和游戏界面大年夜小相关

9y = random.randrange(1,23)

10raspberryPosition = [int(x*20),int(y*20)]

11raspberrySpawned = 1

12score += 1

逝世亡判断则分为两类环境,一是触碰着了游戏界面的界限,二是饕餮蛇触碰着了自己的身段。一旦产存亡亡,则触发gameover。

1# 判断是否逝世亡

2if snakePosition[0] > 600 or snakePosition[0]460 or snakePosition[1]

饕餮蛇运动和吃掉落树莓的历程中,游戏界面必要赓续更新。同时,我们设置了游戏速率。

1# 绘制pygame显示层

2playSurface.fill(blackColour) #蛇身为白色

3for position in snakeSegments:

4pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))

5pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))

6

7# 刷新pygame显示层

8pygame.display.flip()

9# 节制游戏速率

10fpsClock.tick(5)

至此,我们就能完成一个饕餮蛇小游戏了。赶快去实验一下吧!

完备的代码如下:

1import pygame,sys,time,random

2from pygame.locals import *

3# 定义颜色变量

4redColour = pygame.Color(255,0,0)

5blackColour = pygame.Color(0,0,0)

6whiteColour = pygame.Color(255,255,255)

7greyColour = pygame.Color(150,150,150)

8def gameOver(playSurface,score):

9gameOverFont = pygame.font.SysFont('arial.ttf',54)

10gameOverSurf = gameOverFont.render('Game Over!', True, greyColour)

11gameOverRect = gameOverSurf.get_rect()

12gameOverRect.midtop = (300, 10)

13playSurface.blit(gameOverSurf, gameOverRect)

14scoreFont = pygame.font.SysFont('arial.ttf',54)

15scoreSurf = scoreFont.render('Score:'+str(score), True, greyColour)

16scoreRect = scoreSurf.get_rect()

17scoreRect.midtop = (300, 50)

18playSurface.blit(scoreSurf, scoreRect)

19pygame.display.flip()

20time.sleep(5)

21pygame.quit()

22sys.exit()

23def main():

24# 初始化pygame

25pygame.init()

26fpsClock = pygame.time.Clock()

27# 创建pygame显示层

28playSurface = pygame.display.set_mode((600,460))

29pygame.display.set_caption('Snake Game')

30# 初始化变量

31snakePosition = [100,100] #饕餮蛇 蛇头的位置

32snakeSegments = [[100,100]] #饕餮蛇 蛇的身段,初始为一个单位

33raspberryPosition = [300,300] #树莓的初始位置

34raspberrySpawned = 1 #树莓的个数为1

35direction = 'right' #初始偏向为右

36changeDirection = direction

37score = 0 #初始得分

38while True:

39# 检测例如按键等pygame事故

40for event in pygame.event.get():

41if event.type == QUIT:

42pygame.quit()

43sys.exit()

44elif event.type == KEYDOWN:

45# 判断键盘事故

46if event.key == K_RIGHT or event.key == ord('d'):

47changeDirection = 'right'

48if event.key == K_LEFT or event.key == ord('a'):

49changeDirection = 'left'

50if event.key == K_UP or event.key == ord('w'):

51changeDirection = 'up'

52if event.key == K_DOWN or event.key == ord('s'):

53changeDirection = 'down'

54if event.key == K_ESCAPE:

55pygame.event.post(pygame.event.Event(QUIT))

56# 判断是否输入了反偏向

57if changeDirection == 'right' and not direction == 'left':

58direction = changeDirection

59if changeDirection == 'left' and not direction == 'right':

60direction = changeDirection

61if changeDirection == 'up' and not direction == 'down':

62direction = changeDirection

63if changeDirection == 'down' and not direction == 'up':

64direction = changeDirection

65# 根据偏向移动蛇头的坐标

66if direction == 'right':

67snakePosition[0] += 20

68if direction == 'left':

69snakePosition[0] -= 20

70if direction == 'up':

71snakePosition[1] -= 20

72if direction == 'down':

73snakePosition[1] += 20

74# 增添蛇的长度

75snakeSegments.insert(0,list(snakePosition))

76# 判断是否吃掉落了树莓

77if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:

78raspberrySpawned = 0

79else:

80snakeSegments.pop()

81# 假如吃掉落树莓,则从新天生树莓

82if raspberrySpawned == 0:

83x = random.randrange(1,30)

84y = random.randrange(1,23)

85raspberryPosition = [int(x*20),int(y*20)]

86raspberrySpawned = 1

87score += 1

88# 绘制pygame显示层

89playSurface.fill(blackColour)

90for position in snakeSegments:

91pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))

92pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))

93# 刷新pygame显示层

94pygame.display.flip()

95# 判断是否逝世亡

96if snakePosition[0] > 600 or snakePosition[0]460 or snakePosition[1]

假如你对Python编程感兴趣,那么记得来小编的Python进修扣群:1017759557,这里有资本共享,技巧解答,大年夜家可以在一路交流Python编程履历,还有小编收拾的一份Python进修教程,盼望能赞助大年夜家更好的进修python。

您可能还会对下面的文章感兴趣: