如何用Python制作一个贪吃蛇游戏
如果你喜欢玩蛇游戏,我相信你会觉得这篇文章很有趣。
在这篇文章中,我会教你如何开发一个简单的蛇游戏,即使是Python的初学者也会觉得很容易。
有很多种方法可以创建这个游戏,其中一种方法是使用Python的PyGame库,这是我们用来创建游戏的Python库。
另一种方法是使用turtle库。这个模块已经预先安装在Python中,并提供了一个虚拟画布供用户创建形状和图片。
因此,本文将使用turtle库来实现我们的简单蛇游戏,这对于初学者来说特别友好,尤其适合初学的Python开发者。
除了这个模块,我们还将使用另外两个模块,它们分别是:
- Time模块 – 这个方法将允许我们跟踪自上次运行以来经过的秒数。
- Random模块 – 它在Python中生成随机数。
你还需要使用其他基本工具,包括你选择的文本编辑器。在本文中,我将使用VSCode。当然,如果你还没有安装它,你也可以使用其他编辑器。
这将很有趣!
蛇游戏的工作原理
这个游戏的最终目标是玩家通过控制蛇来收集屏幕上显示的食物,以达到最高分数。
玩家使用与蛇移动方向相关的四个方向键来控制蛇。如果蛇撞到障碍物或自己,玩家就会输掉游戏。
我们将按照以下步骤来实现这个游戏。
- 导入预安装的模块(turtle、time和random)到我们的程序中。
- 使用turtle模块创建游戏的屏幕显示。
- 为蛇在屏幕周围的移动方向设置键。
- 实现游戏的玩法。
创建一个名为snakegame.py的文件,在其中添加实现代码。
导入模块
这部分代码将导入Python默认预安装的turtle、time和random模块。此外,我们将为玩家的初始得分、玩家将达到的最高得分和玩家在每次移动中的延迟时间设置默认值。时间模块在这里用于计算延迟的时间。
将以下代码添加到你的snakegame.py文件中。
import turtle
import random
import time
player_score = 0
highest_score = 0
delay_time = 0.1
创建游戏的屏幕显示
我们导入的turtle模块将允许我们创建一个虚拟画布,这将是游戏的窗口屏幕。从这里,我们可以创建蛇的身体和蛇将收集的食物。我们的屏幕还将显示玩家的得分。
将此代码添加到你的<link_2>中。
# 创建窗口屏幕
wind = turtle.Screen()
wind.title("贪吃蛇游戏🐍")
wind.bgcolor("红色")
# 屏幕大小
wind.setup(width=600, height=600)
# 创建蛇
snake = turtle.Turtle()
snake.shape("square")
snake.color("黑色")
snake.penup()
snake.goto(0, 0)
snake.direction = "停止"
# 创建食物
snake_food = turtle.Turtle()
shapes = random.choice('三角形','圆形')
snake_food.shape(shapes)
snake_food.color("蓝色")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('白色')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("你的得分: 0 最高得分: 0", align="center",
font=("Arial", 24, "normal"))
turtle.mainloop()
上面的代码片段从初始化turtle屏幕开始,并为屏幕传递一个标题和背景颜色。在定义了我们屏幕的窗口大小之后,我们在虚拟画布上绘制了蛇的形状。
penup()方法只是抬起乌龟的笔,这样乌龟移动时不会画线。goto(x,y)方法包含将乌龟移动到绝对位置的坐标。
然后我们创建蛇捕获的食物。每次蛇捕获食物和玩家在游戏中达到的最高分数时,我们都想显示玩家的分数。因此,我们使用pen.write()方法来实现这一点。hideturtle()将在标题部分将乌龟图标隐藏在屏幕上。
在代码的末尾添加turtle.mainloop()非常重要,它将在屏幕上显示更长的时间,以便用户可以在屏幕上进行操作。
运行文件,您应该得到以下输出:
为蛇设置方向键
在这里,我们将设置特定的键,以指导蛇在屏幕上移动的方向。我们将使用‘L’表示左,‘R’表示右,‘U’表示上,‘D’表示下。我们将使用乌龟的direction函数来实现这些方向,并调用该函数来控制蛇。
将以下代码片段添加到您的代码中。
# 分配方向 def moveleft(): if snake.direction != "right": snake.direction = "left" def moveright(): if snake.direction != "left": snake.direction = "right" def moveup(): if snake.direction != "down": snake.direction = "up" def movedown(): if snake.direction != "up": snake.direction = "down" def move(): if snake.direction == "up": coord_y = snake.ycor() snake.sety(coord_y+20) if snake.direction == "down": coord_y = snake.ycor() snake.sety(coord_y-20) if snake.direction == "right": coord_x = snake.xcor() snake.setx(coord_x+20) if snake.direction == "left": coord_x = snake.xcor() snake.setx(coord_x-20) wind.listen() wind.onkeypress(moveleft, 'L') wind.onkeypress(moveright, 'R') wind.onkeypress(moveup, 'U') wind.onkeypress(movedown, 'D')
上面的move()函数根据精确的坐标值设置蛇的移动。
listen()函数是一个事件监听器,当玩家按下键时调用移动蛇的方法。
蛇游戏的实现
在布置了蛇游戏的基本外观后,我们将使游戏变成实时游戏。
这将涉及以下内容:
- 每次蛇捕获食物时,增加蛇的长度,最好使用不同的颜色。
- 每次蛇捕获食物时,增加玩家的分数并跟踪最高分数。
- 玩家能够控制蛇避免与墙壁或自己的身体碰撞。
- 蛇碰撞时游戏重新开始。
- 游戏重新开始时,玩家的分数重置为零,而屏幕保留玩家的最高分数。
将以下代码添加到您的python文件中。
segments = []
# 实现游戏过程
while True:
wind.update()
if snake.xcor() > 290 or snake.xcor() 290 or snake.ycor() < -290:
time.sleep(1)
snake.goto(0, 0)
snake.direction = "停止"
snake.shape("方形")
snake.color("绿色")
for segment in segments:
segment.goto(1000, 1000)
segments.clear()
player_score = 0
delay_time = 0.1
pen.clear()
pen.write("玩家得分:{} 最高分:{}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))
if snake.distance(snake_food) highest_score:
highest_score = player_score
pen.clear()
pen.write(“玩家得分:{} 最高分:{}”.format(player_score, highest_score), align=”center”, font=(“Arial”, 24, “normal”))
# 检查碰撞
for i in range(len(segments)-1, 0, -1):
coord_x = segments[i-1].xcor()
coord_y = segments[i-1].ycor()
segments[i].goto(coord_x, coord_y)
if len(segments) > 0:
coord_x = snake.xcor()
coord_y = snake.ycor()
segments[0].goto(coord_x, coord_y)
move()
for segment in segments:
if segment.distance(snake) < 20:
time.sleep(1)
snake.goto(0, 0)
snake.direction = "停止"
snake.color('白色')
snake.shape('方形')
for segment in segments:
segment.goto(1000, 1000)
segment.clear()
player_score = 0
delay_time = 0.1
pen.clear()
pen.write("玩家得分:{} 最高分:{}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))
time.sleep(delay_time)
turtle.mainloop()
在上面的代码片段中,我们在屏幕内为蛇的食物设置了一个随机位置。每当蛇收集到食物时,它的身体段会以不同的颜色增加;在这种情况下是白色,以区分其增长。
在蛇收集食物而没有发生碰撞时,食物会在屏幕大小的270坐标范围内的随机位置上设置。每当蛇收集食物时,玩家的得分增加5分。当蛇发生碰撞时,玩家的得分被设为0,同时屏幕保留最高分。
现在返回Python文件,你会看到你的海龟屏幕看起来像这样:
在上面的代码片段中,我们在屏幕内为蛇的食物设置了一个随机位置。每当蛇收集到食物时,它的身体段会以不同的颜色增加;在这种情况下是白色,以区分其增长。
在蛇收集食物而没有发生碰撞时,食物会在屏幕大小的270坐标范围内的随机位置上设置。每当蛇收集食物时,玩家的得分增加5分。当蛇发生碰撞时,玩家的得分被设为0,同时屏幕保留最高分。
现在返回Python文件,你会看到你的海龟屏幕看起来像这样:
结语 🐍
使用turtle库是创建蛇游戏的一种有趣且简单的方式,正如我们在本文中所看到的那样。或者,你也可以使用PyGame库来实现相同的效果。你可以查看链接以了解如何以不同的方式实现游戏。
你还可以尝试一个或。享受编程吧!