用Python的Dictionary写井字棋游戏


本文将详细介绍如何使用Python的Dictionary来编写一个井字棋游戏,并提供完整的代码示例。

一、构造棋盘

我们可以使用一个3x3的Dictionary来表示井字棋盘,其中Key为二元组(x, y),对应的Value可以为"X"、"O"或者None,分别表示该位置下了X、O或者没有棋子。

board = {(0, 0): None, (0, 1): None, (0, 2): None,
         (1, 0): None, (1, 1): None, (1, 2): None,
         (2, 0): None, (2, 1): None, (2, 2): None}

一开始所有位置都没有棋子,因此初始化为None。为了更好的可读性,可以使用缩进将其表示成3x3的形式。

二、打印棋盘

我们可以编写一个函数,将board打印成井字棋盘的形式。代码如下:

def print_board(board):
    print("  0  1  2")
    for i in range(3):
        row = str(i) + " "
        for j in range(3):
            if board[(i, j)] is None:
                row += "|  "
            else:
                row += "| " + board[(i, j)] + " "
        row += "|"
        print(row)

该函数会输出一个3x3的井字棋盘,横轴为0、1、2,纵轴也为0、1、2,每个格子中填充None、"X"或者"O"。

三、落子

我们也可以编写一个函数,用于在指定位置落子。代码如下:

def make_move(board, x, y, player):
    board[(x, y)] = player

该函数会在指定位置将player对应的棋子落下,即将board中对应的Value修改为player。

四、胜负判断

我们需要编写一个函数,判断当前棋盘上是否有任何一方获胜。实现这个函数,可以通过枚举所有可能的获胜情况,也可以设置一个检查函数,用于判断某一方是否在某个位置获胜。在本文中,我们将使用枚举来实现该函数。

def check_win(board):
    for i in range(3):
        if board[(i, 0)] == board[(i, 1)] == board[(i, 2)] and board[(i, 0)] is not None:
            return board[(i, 0)]
        if board[(0, i)] == board[(1, i)] == board[(2, i)] and board[(0, i)] is not None:
            return board[(0, i)]
    if board[(0, 0)] == board[(1, 1)] == board[(2, 2)] and board[(0, 0)] is not None:
        return board[(0, 0)]
    if board[(0, 2)] == board[(1, 1)] == board[(2, 0)] and board[(0, 2)] is not None:
        return board[(0, 2)]
    return None

该函数将遍历所有可能的获胜情况。若有任何一方获胜,则返回该方的代号("X"或者"O")。如果没有任何一方获胜,则返回None。

五、游戏流程

现在我们已经有了用Python的Dictionary构造井字棋棋盘、打印棋盘、落子、判断胜负的函数,可以编写一个游戏流程函数,用于启动两个玩家之间的井字棋游戏。

def tic_tac_toe():
    board = {(0, 0): None, (0, 1): None, (0, 2): None,
             (1, 0): None, (1, 1): None, (1, 2): None,
             (2, 0): None, (2, 1): None, (2, 2): None}
    player = "X"
    while not check_win(board):
        print_board(board)
        print("Player " + player + "'s turn.")
        x = int(input("Enter x coordinate: "))
        y = int(input("Enter y coordinate: "))
        make_move(board, x, y, player)
        if player == "X":
            player = "O"
        else:
            player = "X"
    print_board(board)
    print("Player " + check_win(board) + " wins!")

该函数会循环执行以下步骤:

  1. 打印当前棋盘状态。
  2. 提示该轮玩家的代号,并等待用户输入落子位置。
  3. 落子。
  4. 交换当前玩家。
  5. 如果任何一方获胜,则输出胜利信息并结束游戏。

结束语

本文详细介绍了如何使用Python的Dictionary编写一个井字棋游戏,包括棋盘构造、打印、落子、胜负判断和游戏流程等方面。读者可以根据本文提供的代码示例以及思路,自行编写自己的井字棋游戏,并进行优化和扩展。

评论关闭