• 脚本:用python实现五子棋


    1. 语言

    Python

    环境配置、无库安装。

    2. 效果

    以第一回合为例

    玩家X

    在这里插入图片描述

    玩家0

    在这里插入图片描述

    3. 脚本

    class GomokuGame:
        def __init__(self, board_size=15):
            self.board_size = board_size
            self.board = [[' ' for _ in range(board_size)] for _ in range(board_size)]
            self.current_player = 'X'
            self.winner = None
     
        def print_board(self):
            print("  " + " ".join(str(i) for i in range(self.board_size)))
            for i in range(self.board_size):
                print(str(i) + " " + " ".join(self.board[i]))
            print()
     
        def make_move(self, row, col):
            if self.board[row][col] == ' ':
                self.board[row][col] = self.current_player
                if self.check_winner(row, col):
                    self.winner = self.current_player
                self.current_player = 'X' if self.current_player == 'O' else 'O'
                return True
            return False
     
        def check_winner(self, row, col):
            directions = [(0, 1), (1, 0), (1, 1), (1, -1)]
            for dr, dc in directions:
                count = 1
                for i in range(1, 5):
                    r, c = row + i * dr, col + i * dc
                    if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player:
                        count += 1
                    else:
                        break
                for i in range(1, 5):
                    r, c = row - i * dr, col - i * dc
                    if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player:
                        count += 1
                    else:
                        break
                if count >= 5:
                    return True
            return False
     
        def play(self):
            while not self.winner:
                self.print_board()
                try:
                    row = int(input("玩家{}的回合,请输入你要下的行数: ".format(self.current_player)))
                    col = int(input("请输入你要下的列数: "))
                    if 0 <= row < self.board_size and 0 <= col < self.board_size:
                        if self.make_move(row, col):
                            if self.winner:
                                self.print_board()
                                print("玩家{},你赢了".format(self.winner))
                                break
                        else:
                            print("无效移动。再试一次。")
                    else:
                        print("输入无效。再试一次。")
                except ValueError:
                    print("输入无效。输入一个数字。")
     
    if __name__ == "__main__":
        game = GomokuGame()
        game.play()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    4. 解读

    首先GomokuGame 类的构造函数 __init__ 初始化游戏。board_size 参数默认为 15,表示棋盘大小。board 是一个二维列表,代表棋盘上的状态。current_player 记录当前玩家,初始为 ‘X’。winner 记录胜利者,初始为 None。

    print_board 方法用于打印当前棋盘的状态。首先,它打印列索引。然后,遍历每一行打印出当前行的棋子状态。

    make_move 方法用于玩家落子。如果指定位置为空,将当前玩家的标记放置在该位置。然后调用 check_winner 方法检查是否有胜利者。最后,切换当前玩家。

    check_winner 方法用于检查是否有玩家获胜。它通过检查当前位置的四个方向来判断是否有五个连续相同的棋子。如果存在,则返回 True,表示有玩家获胜。

    play 方法是游戏的主循环。它持续运行直到有玩家获胜。在每一轮中,它打印当前棋盘,然后获取玩家输入的行和列,进行落子操作。如果落子无效,则要求玩家重新输入。如果有玩家获胜,则打印胜利信息并结束游戏。

    在代码的末尾,通过这个条件判断,确保仅在直接运行该脚本时才会执行创建游戏对象并开始游戏。

    5. Future

    欢迎可视化、GUI高手将其进一步完善。

    Reference

    https://blog.csdn.net/SUEJESDA/article/details/132390225

  • 相关阅读:
    四、DMSP/OLS夜光数据校正全过程
    [C#]JCoder.Db4Net,支持Net Fx\Net Standard\Net5\Net6的数据库类库
    软件外包公司真的去不得吗?
    k8s使用
    自制OS 5-1==用C语言不用C库写内核。一个独立内核OS的制作
    【全民Python】PIP模块的安装,Pyinstaller模块安装,导出exe文件
    SpringBoot基础
    Docker Registry
    【高效办公_PDF】如何快速批量整合多个PDF???---Python方法
    RPA要不要学习,真的能解放双手吗?
  • 原文地址:https://blog.csdn.net/JishuFengyang/article/details/132909475