当前位置: 首页 > 图灵资讯 > 行业资讯> 10分钟用Python编写贪吃蛇小游戏

10分钟用Python编写贪吃蛇小游戏

发布时间:2025-09-30 17:24:29

首先,让我们来看看贪吃蛇游戏的主要想法

75a7dd7878550c981e03394155fa7ec.png

废话不多说,我们直接来解释一下如何用Python来写贪吃蛇。

1.调用库和初始设置

1.1 调用第三方库

Python与其他语言非常不同的是,他有很多第三方库可以调用。Python编写游戏时,Pygame是一个非常简单的第三方库,可以通过pip直接安装。安装方法已在前一篇文章中提到,因此不再重复。想了解更多pygame功能的朋友也可以查阅官方文档。

这是我们在编写贪吃蛇时需要调用的库。

importpygame
2importsystsss
3importtimme
4importrandom
5frompygame.localsimport*

1.2 初始设置

我们通过这些行代码初始化pygame,定义窗口(边界)的大小、标题和图标。

1#pygame初始化
2pygame.init()
3fpsClock=pygame.time.Clock()
4
创建pygame显示层
6playSurface=pygame.display.set_mode((640,480))
7#定义标题
8pygame.display.set_caption('SnakeGo!')
9#加载资源图片,game.ico包含在最终文件中
10image=pygame.image.load('game.ico')
11#设置图标
12pygame.display.set_icon(image)

1.3 定义颜色变量

因为我们需要使用一些颜色,而Python不是我们自己的。因此,我们需要定义几种颜色。

1redcolourur=pygame.Color(255,0,0)
2blackcolourlllourllour=pygame.Color(0,0,0)
3whitecolourur=pygame.Color(255,255,255)
4greycolour=pygame.Color(150,150,150)
5LightGrey=pygame.Color(220,220,220)

2.GameOver

正如前面提到的,所有游戏中最重要的部分是循环。Gameover函数是跳出这个循环的条件。这里给蛇吃到自己的身体或接触边界时显示的界面(判断死亡的代码稍后会显示)

1#定义gameover函数
2defgameover(playSurface,score):
3#显示GAMEOVER并定义字体和大小
4gameoverfont=pygame.font.Font('arial.ttf',72)
5gameoversur=gameOverFont.render('GameOver',True,greyColour)
6gameOverRect=gameOverSurf.get_rect()
7gameOverRect.midtop=(320,125)
8playSurface.blit(gameOverSurf,gameOverRect)
9#显示分数并定义字体和大小
10scoreFont=pygame.font.Font('arial.ttf',48)
Surff11score=scoreFont.render('SCORE:'+str(score),True,greyColour)
Rectt12score=scoreSurf.get_rect()
Rectt13score.midtop=(320,225)
14playSurface.blit(scoreSurf,scoreRect)
15pygame.display.flip()#刷新显示界面
休眠5秒后自动关闭16#
17time.sleep(5)
18pygame.quit()
19sys.exit()

3.贪吃蛇和树莓

接下来介绍一下游戏的主题部分,就是贪吃蛇和蛇莓的展示和运动。

3.1 定义初始位置

我们把整个界面看成很多20*20的小方块,每个方块代表一个单位,蛇的长度可以用几个单位来表示。蛇的身体以列表的形式存储,便于以后删除。

1#初始变量
2snakePosition=[100,100]#蛇头位置
3snakesegments=[100,100],[80,100],[60,100]
4raspberyPosition=[300,300]#树莓位置
5raspberySpawned=1#树莓
6direction=#39;right'#初始方向
7changedirection=direction
8score=0#初始分数

3.2 键盘输入判断蛇的运动

我们需要通过键盘输入的上下左右键或WASD来控制蛇的运动,并添加按下ESC退出游戏的功能。

1#检测pygame事件,如按键等
2foreventinpygame.event.get():
三ifevent.type==QUIT:
4pygame.quit()
5sys.exit()
6elifeventent.type==KEYDOWN:
7#判断键盘事件
8ifevent.key==K_RIGHTorevent.key==ord('d'):
9changedirection;right'
10ifevent.key==K_LEFTorevent.key==ord('a'):
11changedirection=#39;left'
12ifevent.key==K_UPorevent.key==ord('w'):
13changedirection=#39;up'
14ifevent.key==K_DOWNorevent.key==ord('s'):
15changeDirection='down'
16ifevent.key==K_ESCAPE:#按esc退出游戏
17pygame.event.post(pygame.event.Event(QUIT))

贪吃蛇运动有一个特点:不能反方向运动。因此,我们需要增加限制。

1#判断是否输入相反的方向
2ifchangeDirection=;right'andnotdirection=='left':
3direction=changeDirection
4ifchangedirection='left'andnotdirection=='right':
5direction=changeDirection
6ifchangedirection='up'andnotdirection=='down':
7direction=changeDirection
8ifchangedirection='down'andnotdirection=='up':
9direction=changeDirection

下一步是根据键盘的输入将蛇头转弯,并将蛇头的当前位置添加到蛇身列表中

1#按方向移动蛇头坐标
2ifdirection='right':
3snakePosition[0]+=20
4ifdirection='left':
5snakePosition[0]=20
6ifdirection='up':
7snakePosition[1]-=20
8ifdirection='down':
9snakePosition[1]+=20
10
列表中添加了蛇头的位置
Segments12snake.insert(0,list(snakePosition))

3.3 判断是否吃树莓

如果蛇头与覆盆子的方块重叠,则确定吃覆盆子并清除覆盆子的数量;如果你不吃覆盆子,蛇身会跟着蛇头移动,蛇身的最后一节会被踢出名单。

1#判断是否吃了树莓
2ifsnakePosition[0]==raspberryPosition[0]andsnakePosition[1]==raspberryPosition[1]:
3raspberySpawned
4else:
Segments5snake.pop()#每次将最后一个单位的蛇身踢出列表

3.4 再生树莓

当覆盆子数量为0时,重生覆盆子,分数增加。

1#如果你吃覆盆子,重生覆盆子
2ifraspberySpawned=:
3x=random.randrange(1,32)
4y=random.randrange(1,24)
5raspberyPosition=[int(x*20),int(y*20)]
6raspberySpawned
7score+=1

3.5 刷新显示层

每次蛇和树莓运动时,都会刷新显示层进行显示。有点像动画的“帧”。

                  
                

相关文章

10分钟用Python编写贪吃蛇小游戏

10分钟用Python编写贪吃蛇小游戏

2025-09-30
Python3中真真假假True、False、None等含义详解

Python3中真真假假True、False、None等含义详解

2025-09-30
手把手教你使用python中的循环for和while

手把手教你使用python中的循环for和while

2025-09-30
详解Python面向对象编程之类、实例、方法

详解Python面向对象编程之类、实例、方法

2025-09-30
Python中lambda表达式的优缺点及使用场景

Python中lambda表达式的优缺点及使用场景

2025-09-29
详解json.dumps中文乱码问题

详解json.dumps中文乱码问题

2025-09-29