見出し画像

3x3のマルバツゲーム(Tic-Tac-Toe)のPythonコードを書きました!

ターミナルやコマンドプロンプトを通じて交互に打ち手を入力します。
注意点として、行と列は0から始まります。
(3行, 2列)を指定する時は、(2 1)と入力します。

def print_board(board):
    """ボードを表示する関数"""
    for row in board:
        print(" | ".join(row))
        print("-" * 9)

def check_winner(board, player):
    """勝者がいるかどうかをチェックする関数"""
    # 横、縦、斜めの勝利条件
    win_conditions = [
        [board[0][0], board[0][1], board[0][2]],
        [board[1][0], board[1][1], board[1][2]],
        [board[2][0], board[2][1], board[2][2]],
        [board[0][0], board[1][0], board[2][0]],
        [board[0][1], board[1][1], board[2][1]],
        [board[0][2], board[1][2], board[2][2]],
        [board[0][0], board[1][1], board[2][2]],
        [board[0][2], board[1][1], board[2][0]]
    ]
    # どれかの勝利条件を満たしているか
    return [player, player, player] in win_conditions

def get_valid_input(board):
    """プレイヤーから有効な入力を受け取る関数"""
    while True:
        try:
            x, y = map(int, input("次の手を '行 列' の形式で入力してください(例:1 2): ").split())
            if board[x][y] == " ":
                return x, y
            else:
                print("その場所にはすでにマークがあります。他の場所を選んでください。")
        except (IndexError, ValueError):
            print("無効な入力です。もう一度入力してください。")

def main():
    """マルバツゲームのメイン関数"""
    # ゲームボードの初期化
    board = [[" " for _ in range(3)] for _ in range(3)]
    current_player = "X"
    for _ in range(9):
        print_board(board)
        x, y = get_valid_input(board)
        board[x][y] = current_player

        if check_winner(board, current_player):
            print_board(board)
            print(f"プレイヤー {current_player} の勝利です!")
            return
        
        # プレイヤーの交換
        current_player = "O" if current_player == "X" else "X"

    print_board(board)
    print("引き分けです!")

if __name__ == "__main__":
    main()

このファイルを例えば、「tictactoe.py」などのファイル名で保存します。
そして、ターミナルで、

python tictactoe.py

を実行すると、遊ぶことができます!


【SNS】

この記事が気に入ったらサポートをしてみませんか?