如何用 Python 制作蛇游戏
已发表: 2022-02-02如果你是一个喜欢玩蛇游戏的人,我相信你会觉得这篇文章很有趣。
在本文中,我将教你如何设计一个简单的蛇游戏,即使是 Python 初学者也能轻松开发。
有很多方法可以创建这个游戏,其中一种包括使用 Python 的 PyGame 库,这是我们用来创建游戏的 Python 库。
另一种方法是使用海龟库。 该模块预装了 Python,它为用户提供了一个虚拟画布来创建形状和图片。
因此,本文将使用 turtle 库来实现我们的简单蛇游戏,该游戏对初学者非常友好,尤其适用于 Python 开发新手。
除了这个模块,我们还将使用另外两个模块,即;
- 时间模块——此方法将允许我们跟踪自上一次以来经过的秒数。
- Random 模块——它在 Python 中随机生成数字。
您需要使用的其他基本工具包括您选择的文本编辑器。 我将在本文中使用 VSCode。 当然,如果您还没有 Python 3,则需要在您的机器上安装它。 您也可以使用 Geekflare 编译器。
这应该是有趣的!
蛇游戏如何运作
这个游戏的最终目标是让玩家通过控制蛇来收集屏幕显示的食物来获得最高分。
玩家使用与蛇移动方向相关的四个方向键来控制蛇。 如果蛇撞到一个方块或它自己,玩家就输了。
我们将按照以下步骤来实现这个游戏。
- 将预安装的模块(turtle、time 和 random)导入我们的程序。
- 使用 turtle 模块创建游戏的屏幕显示。
- 设置蛇在屏幕周围移动方向的键。
- 游戏实现。
创建一个snakegame.py 文件,我们将在其中添加实现代码。
导入模块
这段代码将导入默认预装在 Python 中的海龟、时间和随机模块。 此外,我们将为玩家的初始分数、玩家将获得的最高分数以及玩家每一步的延迟时间设置默认值。 这里使用时间模块来计算延迟时间。
将以下代码添加到您的 snakegame.py 文件中。
import turtle import random import time player_score = 0 highest_score = 0 delay_time = 0.1
创建游戏的屏幕显示
我们在此处导入的海龟模块将允许我们创建一个虚拟画布,该画布将成为游戏的窗口屏幕。 从这里,我们可以创建蛇的身体和蛇将收集的食物。 我们的屏幕还将显示玩家的跟踪得分。
将此代码添加到 Python 文件中。
# window screen created wind = turtle.Screen() wind.title("Snake Maze") wind.bgcolor("red") # The screen size wind.setup(width=600, height=600) # creating the snake snake = turtle.Turtle() snake.shape("square") snake.color("black") snake.penup() snake.goto(0, 0) snake.direction = "Stop" # creating the food snake_food = turtle.Turtle() shapes = random.choice('triangle','circle') snake_food.shape(shapes) snake_food.color("blue") snake_food.speed(0) snake_food.penup() snake_food.goto(0, 100) pen = turtle.Turtle() pen.speed(0) pen.shape('square') pen.color('white') pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write("Your_score: 0 Highest_Score : 0", align="center", font=("Arial", 24, "normal")) turtle.mainloop()
上面的代码片段从初始化海龟屏幕开始,并将标题和背景颜色传递给屏幕。 定义屏幕的窗口大小后,我们在虚拟画布上绘制蛇的形状。
penup() 方法只是拿起海龟的笔,这样海龟移动时就不会画线。 goto(x,y) 方法包含将海龟移动到绝对位置的坐标位置。
然后我们创造蛇收集的食物。 我们希望在每次蛇收集食物时显示玩家的分数以及玩家在游戏中达到的最高分数。 因此,我们使用 pen.write() 方法来实现这一点。 hideturtle() 将海龟图标从屏幕上的标题部分隐藏起来。
在代码末尾添加 turtle.mainloop() 很重要,这将延长屏幕显示时间,让用户可以在屏幕上执行某些操作。
运行该文件,您应该有以下输出:

设置蛇的方向键
在这里,我们将设置特定的键来引导蛇在屏幕上的移动方向。 我们将使用“L”表示左,“R”表示右,“U”表示上,“D”表示下。 我们将使用我们将在蛇上调用的海龟的方向函数来实现这些方向。
将以下代码段添加到您的代码中。
# Assigning directions 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 = [] #Implementing the gameplay while True: wind.update() if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290: time.sleep(1) snake.goto(0, 0) snake.direction = "Stop" snake.shape("square") snake.color("green") for segment in segments: segment.goto(1000, 1000) segments.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) if snake.distance(snake_food) < 20: coord_x = random.randint(-270, 270) coord_y = random.randint(-270, 270) snake_food.goto(coord_x, coord_y) # Adding segment added_segment = turtle.Turtle() added_segment.speed(0) added_segment.shape("square") added_segment.color("white") added_segment.penup() segments.append(added_segment) delay_time -= 0.001 player_score += 5 if player_score > highest_score: highest_score = player_score pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) # checking for collisions 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 = "stop" snake.color('white') snake.shape('square') for segment in segments: segment.goto(1000, 1000) segment.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) time.sleep(delay_time) turtle.mainloop()
在上面的代码片段中,我们为蛇的食物在屏幕内设置了一个随机位置。 蛇每次收集到这种食物,它的身体部分就会以不同的颜色增加; 白色,在这种情况下,以区分它的生长。
蛇在没有碰撞的情况下收集食物后,将食物设置在屏幕尺寸270坐标范围内的随机位置。 每次蛇收集食物,玩家的分数增加 5。当蛇碰撞时,玩家的分数设置为 0,而屏幕保持最高分数。
现在返回 Python 文件,你应该会看到你的海龟屏幕如下所示:
结论
正如我们在本文中所见,使用海龟库是创建蛇游戏的一种有趣且简单的方法。 或者,您可以使用 PyGame 库实现相同的功能。 您可以在此处查看 PyGame 教程,了解如何以不同的方式实现游戏。
您还可以尝试在 Python 中进行数字猜谜游戏或如何在 Python 中获取 JSON 数据。
享受编码!