スクリプト: Python でバックギャモンを実装する

1. 言語

パイソン

環境設定やライブラリのインストールは必要ありません。

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()

4. 解釈

まず、GomokuGameクラスのコンストラクターが__init__ ゲームを初期化します。board_sizeパラメータのデフォルトは 15 で、チェス盤のサイズを示します。boardは、チェス盤上の状態を表す 2 次元のリストです。current_player現在のプレーヤーを記録します。最初は「X」です。winner勝者を記録します。最初は「なし」です。

print_boardメソッドは、チェス盤の現在の状態を出力するために使用されます。まず、列インデックスを出力します。次に、各行を反復処理して、現在の行のチェスの駒のステータスを出力します。

make_moveプレイヤーの移動に使用されるメソッド。指定された位置が空の場合、現在のプレイヤーのマーカーをその位置に配置します。次に、check_winnerメソッドを呼び出して、勝者がいるかどうかを確認します。最後に、現在のプレーヤーを切り替えます。

check_winnerプレイヤーが勝ったかどうかを確認するために使用されるメソッド。現在位置の4方向を確認して同じピースが5つ連続するかどうかを判定します。存在する場合は True を返し、1 人のプレイヤーが勝ったことを示します。

playメソッドはゲームのメインループです。プレイヤーが勝つまで実行され続けます。各ラウンドで、現在のボードを出力し、プレーヤーが入力した行と列を取得して、配置操作を実行します。動きが無効な場合、プレイヤーは再入力する必要があります。プレイヤーが勝った場合は、勝利メッセージが表示され、ゲームが終了します。

コードの最後で、この条件判断により、スクリプトを直接実行した場合にのみゲーム オブジェクトの作成とゲームの開始が実行されることが保証されます。

5.未来

視覚化と GUI の専門家は、これをさらに改善することを歓迎します。

参照

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

おすすめ

転載: blog.csdn.net/JishuFengyang/article/details/132909475