使用 PyGame - Python 制作滑块拼图

2024 年 8 月 29 日 | 阅读 6 分钟

滑动拼图是一种流行的益智游戏,它通过在棋盘上滑动图块来将它们重新排列成特定的顺序。Python 滑动图块拼图也称为滑动拼图或滑动方块游戏。在本文中,我们将使用流行的 Python 游戏开发库 PyGame 来构建一个滑动拼图游戏。在本文结束时,您将对如何使用 PyGame 在 Python 中构建简单的游戏有一个很好的理解,并且您将拥有一个可以向朋友炫耀的滑动拼图游戏。

要开始,我们首先需要安装 PyGame。您可以通过在终端或命令提示符中运行以下命令来完成此操作:

安装 PyGame 后,创建一个新的 Python 文件并按如下方式导入该库:

接下来,我们将初始化 PyGame 并为我们的游戏创建一个窗口。将以下代码添加到您的文件中:

pygame.init() 函数初始化所有 PyGame 的模块并设置任何必要的资源。pygame.Display.set_mode() 函数创建一个游戏窗口,窗口大小为 window_size(在本例中为 400x400 像素)。最后,pygame.display.set_caption() 将窗口标题设置为“滑动拼图”。

现在我们已经设置好了窗口,我们需要为滑动拼图创建图块。我们将每个图块表示为一个带有数字的矩形。为此,我们将创建一个具有数字和位置的 Tile 类。将以下代码添加到您的文件中:

Tile 类有两个属性:number 和 position。position 属性表示图块在窗口中的位置,number 属性表示应显示在图块上的数字。

draw 方法将窗口作为参数,并使用 PyGame 的字体渲染函数在图块上显示数字。文本通过根据其位置计算图块的中心来使其在图块中居中。

接下来,我们将创建一个图块数组并将它们放置在窗口中。将以下代码添加到您的文件中:

上面的事件处理循环会检查游戏中的任何事件,例如玩家关闭窗口。如果玩家关闭窗口,则 running 变量将设置为 False,这将导致游戏退出。

接下来,我们将在窗口中绘制图块。将以下代码添加到您的文件中:

window.fill() 函数用于清除窗口并用纯黑色填充它。然后 for 循环遍历 tiles 数组中的每个图块并调用 draw 方法在图块上显示数字。最后,pygame.display.update() 用于更新窗口并显示图块。

现在我们已经显示了图块,我们需要允许玩家移动它们。为此,我们将添加代码来检测图块上的鼠标点击,并将点击的图块与空图块(我们将在 tiles 数组中将其表示为 None 值)交换位置。将以下代码添加到 while 循环中:

pygame.mouse.get_pressed()[0] 函数在按下鼠标左键时返回 True,否则返回 False。如果按下鼠标左键,我们将使用 pygame.mouse.get_pos() 获取鼠标的当前位置,然后遍历 tiles 数组以查找哪个图块被点击了。

在找到被点击的图块后,我们使用 if 语句来确定其右侧、左侧、顶部或底部的图块是否为空(表示为 None 值)。如果这些图块中的任何一个为空,则被点击的图块和空图块将被交换。

当窗口关闭时,将以下代码添加到您的文件末尾以清除资源并结束游戏:

就是这样!您现在已经使用 PyGame 构建了一个基本的滑动拼图游戏。您可以继续在此代码的基础上进行构建,并添加其他功能,例如检查拼图是否已解决或允许玩家选择难度级别。

为了让游戏更有趣,我们可以添加一个计时器来跟踪玩家解决拼图所需的时间。为此,我们将使用 pygame.time.get_ticks() 函数,该函数返回自 PyGame 初始化以来经过的毫秒数。

接下来,让我们添加代码来显示自游戏开始以来经过的时间。我们将使用 pygame.font 模块来渲染文本,并将以下代码添加到 while 循环中:

time_elapsed 变量存储自游戏开始以来经过的毫秒数,我们通过将 start_time 从当前时间减去(使用 pygame.time.get_ticks())来计算。

time_text 变量存储渲染的文本,该文本显示经过的时间,我们使用 font.render() 函数创建它。第一个参数是要渲染的文本,在本例中是“Time: ”后跟经过的时间(以秒为单位)(通过除以 1000 从毫秒转换)。第二个参数指定渲染文本时是否使用抗锯齿。第三个参数是文本的颜色。最后,window.blit() 函数用于将 time_text 绘制在窗口的指定位置(0, 0),即窗口的左上角。

我们还可以添加一条消息,在拼图解决和游戏结束时显示。为此,我们将向文件顶部添加一个新的 gameOver 变量:

并将以下代码添加到 while 循环中,在绘制图块的 for 循环之后:

第一个 if 语句检查 tiles 数组中是否有 None 值,这意味着拼图尚未解决。如果数组中没有 None 值,则表示拼图已解决,我们将 gameOver 设置为 True。

第二个 if 语句检查 gameOver 是否为 True,如果是,它将使用 gameOver_text 变量在窗口上显示“您赢了!”消息。

最后,在拼图解决并退出游戏时,最好添加一点延迟,以便玩家有时间看到“您赢了!”消息。将以下代码添加到文件末尾:

上述代码的输出将是使用 PyGame 构建的功能齐全的滑动拼图游戏。游戏窗口将显示拼图的图块以及一个计时器,用于跟踪自游戏开始以来经过的时间。如果玩家成功解决了拼图,游戏窗口将显示“您赢了!”消息并在 3 秒延迟后关闭。

当然,游戏的具体外观可能会因您的具体设计选择而异,例如文本的字体、颜色和大小,图块的大小和形状等等。但总的来说,上面提供的代码应该为您使用 PyGame 构建滑动拼图游戏提供了一个坚实的起点。