返回

五子棋游戏:Python+Pygame打造的经典挑战

后端

用 Python 和 Pygame 创建引人入胜的五子棋游戏

五子棋,一种古老而令人着迷的策略棋盘游戏,如今借助 Python 和 Pygame 库的力量,可以在数字世界中重现。在这个全面的教程中,我们将深入探讨如何使用这些强大的工具来构建您自己的五子棋游戏,让您尽情享受这款经典游戏带来的乐趣。

准备阶段

踏上这场激动人心的编码之旅之前,我们需要做好准备工作。首先,确保您的计算机已安装 Python 和 Pygame 库。然后,创建一个新的 Python 项目,并在其中创建一个名为“main.py”的文件,它将作为我们游戏的主程序。

导入必备库

现在,我们来导入游戏所需的库。在“main.py”文件中,添加以下代码:

import pygame
import sys

初始化游戏窗口

接下来,我们需要初始化游戏窗口,为我们的五子棋游戏提供一个可视化界面。在“main.py”文件中,添加以下代码:

pygame.init()
screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("五子棋游戏")

设置游戏参数

为了定义游戏的规则和玩法,我们需要设置一些游戏参数。在“main.py”文件中,添加以下代码:

board_size = 15
cell_size = 40
turn = "black"
game_over = False
  • board_size :棋盘的大小,我们将其设置为 15x15。
  • cell_size :棋盘中每个单元格的大小,我们将其设置为 40 像素。
  • turn :当前轮到谁走,我们将其设置为“black”。
  • game_over :游戏是否结束,我们将其设置为 False。

创建棋盘

现在,让我们创建棋盘,这是游戏的核心。在“main.py”文件中,添加以下代码:

board = [[0 for _ in range(board_size)] for _ in range(board_size)]

这个代码创建了一个二维数组,代表 15x15 的棋盘,每个单元格最初都是空的(用 0 表示)。

绘制棋盘

为了让棋盘在屏幕上显示,我们需要绘制它。在“main.py”文件中,添加以下代码:

def draw_board():
    for i in range(board_size):
        for j in range(board_size):
            if board[i][j] == 0:
                pygame.draw.rect(screen, (255, 255, 255), (i * cell_size, j * cell_size, cell_size, cell_size))
            elif board[i][j] == 1:
                pygame.draw.circle(screen, (0, 0, 0), (i * cell_size + cell_size // 2, j * cell_size + cell_size // 2), cell_size // 2)
            else:
                pygame.draw.circle(screen, (255, 255, 255), (i * cell_size + cell_size // 2, j * cell_size + cell_size // 2), cell_size // 2)

这个代码遍历棋盘中的每个单元格,并根据单元格的状态(空、黑棋或白棋)绘制相应的形状。

处理鼠标点击事件

为了让玩家能够在棋盘上放置棋子,我们需要处理鼠标点击事件。在“main.py”文件中,添加以下代码:

def handle_mouse_click():
    mouse_x, mouse_y = pygame.mouse.get_pos()
    i = mouse_x // cell_size
    j = mouse_y // cell_size
    if board[i][j] == 0 and not game_over:
        board[i][j] = 1 if turn == "black" else 2
        turn = "black" if turn == "white" else "white"

这个代码获取鼠标点击的位置,并将其转换为棋盘中的行号和列号。然后,它检查该单元格是否为空且游戏尚未结束,如果是,则将该单元格标记为当前玩家的颜色(黑棋或白棋),并切换到另一个玩家。

检查游戏是否结束

五子棋的精髓在于确定何时游戏结束。在“main.py”文件中,添加以下代码:

def check_game_over():
    global game_over
    for i in range(board_size):
        for j in range(board_size):
            if board[i][j] != 0:
                # 检查水平方向是否有 5 个连续的棋子
                if i + 4 < board_size and board[i][j] == board[i + 1][j] == board[i + 2][j] == board[i + 3][j] == board[i + 4][j]:
                    game_over = True
                    return

                # 检查竖直方向是否有 5 个连续的棋子
                if j + 4 < board_size and board[i][j] == board[i][j + 1] == board[i][j + 2] == board[i][j + 3] == board[i][j + 4]:
                    game_over = True
                    return

                # 检查左上右下方向是否有 5 个连续的棋子
                if i - 4 >= 0 and j + 4 < board_size and board[i][j] == board[i - 1][j + 1] == board[i - 2][j + 2] == board[i - 3][j + 3] == board[i - 4][j + 4]:
                    game_over = True
                    return

                # 检查右上左下方向是否有 5 个连续的棋子
                if i + 4 < board_size and j - 4 >= 0 and board[i][j] == board[i + 1][j - 1] == board[i + 2][j - 2] == board[i + 3][j - 3] == board[i + 4][j - 4]:
                    game_over = True
                    return

这个代码遍历棋盘中的每个单元格,检查是否有 5 个连续的棋子(水平、竖直、左上右下或右上左下)。如果找到,则将游戏结束标志 game_over 设置为 True。

游戏主循环

现在,我们到了让游戏运转起来的关键部分。在“main.py”文件中,添加以下代码:

while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            handle_mouse_click()

    draw_board()
    check_game_over()

    pygame.display.update()

这个代码启动了游戏主循环,它将持续运行,直到游戏结束。循环内,它处理鼠标点击事件、绘制棋盘和检查游戏是否结束。如果玩家放置了导致游戏结束的棋子,循环将终止。

运行游戏

准备好踏上五子棋的征程了吗?只需在命令行中输入以下命令即可启动游戏:

python main.py

常见问题解答

  1. 如何改变棋盘大小?

    • 修改 board_size 变量以调整棋盘的大小。例如,要创建一个 19x19 的棋盘,请将 board_size 设置为 19。
  2. 我可以自定义单元格大小吗?

    • 当然!只需修改 cell_size 变量即可更改单元格的大小。例如,要使用 50 像素的单元格,请将 cell_size 设置为 50。
  3. 我可以让电脑成为对手吗?

    • 虽然这个教程没有涵盖人工智能,但您可以探索第三方库(如 PyGame AI)来实现计算机对手。
  4. 我的鼠标点击不起作用,是怎么回事?

    • 确保您的鼠标光标位于棋盘区域内,并且您单击了未占据的单元格。
  5. 如何保存和加载游戏进度?

    • 要存储游戏状态,可以使用 Python 的 pickle 模块。要加载游戏进度,只需从保存的文件中解压缩数据。

结论

通过利用 Python 和 Pygame 的强大功能,我们已经创建了一款功能齐全的五子棋游戏。它具备所有经典游戏元素,如棋盘、棋子、鼠标点击事件处理和游戏结束检测。

无论您是五子棋的初学者还是经验丰富的玩家,这款游戏都为享受这款永恒的策略游戏提供了完美的数字画布。那么,准备好在像素化的棋盘上挑战自我或对手了吗?那就行动起来,让五子棋的