c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python实现井字棋游戏

更新时间:2023-07-14

段落一

在程序需求中,我们需要实现一个井字棋游戏。为了实现这个游戏,我们需要了解井字棋游戏的规则。井字棋游戏是一个二人游戏,游戏者通过在一个3×3方格的游戏板上放置“X”或“O”标记来获得胜利。玩家轮流放置标记,先在任意一行、任意一列或任意对角线上占据三个相邻的格子的玩家获胜。

我们可以使用numpy创建一个3×3的二维数组表示游戏板。我们可以将游戏板上的每个位置用0来表示这个位置没有被占据,用1表示这个位置被玩家1占据,用-1表示这个位置被玩家2占据。


import numpy as np

class TicTacToe:
    def __init__(self):
        self.board = np.zeros((3,3))

段落二

接下来我们需要实现玩家的移动。我们使用玩家1和玩家2交替移动的方式来完成游戏。我们可以使用一个play方法来实现玩家的移动。当玩家进行移动时,我们需要检查这个位置是否为空。如果这个位置为空,我们可以将该位置用1或-1来表示该位置被玩家占据。

我们可以在play方法中传递行和列的值。我们还需要实现一个方法来检查该位置是否为空,如果为空,则返回True,否则返回False。


    def play(self, row, col, player):
        if self.is_valid(row, col):
            self.board[row][col] = player
            return True
        else:
            return False
    
    def is_valid(self, row, col):
        if self.board[row][col] == 0:
            return True
        else:
            return False

段落三

接下来,我们需要实现一个方法来检查游戏是否结束。游戏结束的条件是任意一方玩家在任意一行、任意一列或任意对角线上占据三个相邻的格子。我们可以使用一个判断来检查是否符合这个条件。

游戏结束后,我们需要返回一个胜利者的结果。如果胜利者是玩家1,则返回1,如果胜利者是玩家2,则返回-1。如果平局,则返回0。


    def game_over(self):
        for i in range(3):
            if sum(self.board[i,:]) == 3 or sum(self.board[i,:]) == -3: # 行
                return self.board[i][0]
            if sum(self.board[:,i]) == 3 or sum(self.board[:,i]) == -3: # 列
                return self.board[0][i]
        if sum(self.board.diagonal()) == 3 or sum(self.board.diagonal()) == -3: # 主对角线
            return self.board[0][0]
        if sum(np.fliplr(self.board).diagonal()) == 3 or sum(np.fliplr(self.board).diagonal()) == -3: # 副对角线
            return self.board[0][2]
        if np.where(self.board == 0)[0].size == 0: # 平局
            return 0
        return None

段落四

最后,我们需要实现游戏的主程序,让玩家可以进行游戏。我们可以实现一个while循环,让玩家进行交替移动,直到游戏结束。我们通过输入行和列的值来实现玩家的移动,如果移动不合法,则让玩家重新输入。

我们在程序中实例化TicTacToe类,并交替移动玩家1和玩家2,直到游戏结束。最后根据胜利者的结果输出游戏结束的信息。


if __name__ == '__main__':
    game = TicTacToe()
    player = 1
    while True:
        row = int(input("请输入行:"))
        col = int(input("请输入列:"))
        if game.play(row-1, col-1, player):
            winner = game.game_over()
            if winner is not None:
                if winner == 1:
                    print("玩家1获胜!")
                elif winner == -1:
                    print("玩家2获胜!")
                else:
                    print("平局")
                break
            player = -player
        else:
            print("该位置已被占据,请重新输入!")