如何用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库来实现相同的效果。你可以查看链接以了解如何以不同的方式实现游戏。

你还可以尝试一个或。享受编程吧!

类似文章