プログラミング

Pythonで四つ並べゲームを作る

Four-in-a-Row(四つ並べ)ゲームのプログラム

Four-in-a-Row(四つ並べ)は、2人で遊ぶボードゲームで、プレイヤーは交互にコマを縦または横、または斜めに4つ並べることを目指します。このゲームは、いわゆる「Connect Four(コネクトフォー)」としても知られています。

ここでは、Pythonを使用してこのゲームを実装する方法について詳しく説明します。最初にゲームボードを作成し、プレイヤーの入力を受け付け、勝者を判定するロジックを構築します。

1. ゲームボードの作成

まず、ゲームボードを二次元リストとして作成します。ボードは6行7列の格子状で、プレイヤーがコマを置くことができます。コマは「X」または「O」で表現します。

python
def create_board(): board = [[" " for _ in range(7)] for _ in range(6)] return board

ここでは、create_board関数で6行7列の空のボードを作成しています。リスト内の空白文字 " " は、まだコマが置かれていないセルを示します。

2. ゲームボードの表示

次に、ゲームボードをコンソールに表示する関数を作成します。

python
def print_board(board): print("\n".join(["|".join(row) for row in board])) print("-" * 15)

この関数は、ボードの各行を縦に区切り、各列を「|」で区切って出力します。また、ボードの下には区切り線を表示します。

3. プレイヤーの入力

プレイヤーがコマを置く列を選ぶための関数を作成します。この関数は、選択された列にコマを置くことができるかどうかを確認します。

python
def valid_move(board, column): if column < 0 or column >= 7: return False if board[0][column] != " ": return False return True def make_move(board, column, player): for row in range(5, -1, -1): if board[row][column] == " ": board[row][column] = player return row, column return -1, -1
  • valid_move関数は、選択された列がボード内で有効か、またその列にコマを置けるかをチェックします。
  • make_move関数は、プレイヤーのコマをボードに置き、コマを置いた位置(行と列)を返します。

4. 勝者の判定

ゲームの勝者を判定するために、横、縦、斜めに4つ並んだコマをチェックする関数を作成します。

python
def check_win(board, player): # 横のチェック for row in range(6): for col in range(4): if all([board[row][col + i] == player for i in range(4)]): return True # 縦のチェック for row in range(3): for col in range(7): if all([board[row + i][col] == player for i in range(4)]): return True # 斜め(右下がり)のチェック for row in range(3): for col in range(4): if all([board[row + i][col + i] == player for i in range(4)]): return True # 斜め(左下がり)のチェック for row in range(3, 6): for col in range(4): if all([board[row - i][col + i] == player for i in range(4)]): return True return False

この関数は、ボードをチェックし、指定したプレイヤーが横、縦、斜めで4つ並んでいるかを確認します。もし並んでいれば、勝者を判定してTrueを返します。

5. ゲームの進行

ゲームの進行を管理するメインの関数を作成します。この関数は、プレイヤー交代と勝者の判定を行います。

python
def play_game(): board = create_board() current_player = "X" while True: print_board(board) column = int(input(f"プレイヤー {current_player} のターン。コマを置く列(0-6)を選んでください: ")) if not valid_move(board, column): print("無効な列です。もう一度選んでください。") continue row, col = make_move(board, column, current_player) if check_win(board, current_player): print_board(board) print(f"プレイヤー {current_player} の勝ちです!") break # プレイヤー交代 current_player = "O" if current_player == "X" else "X"

この関数は、ゲームを進行させ、プレイヤーがコマを置くための入力を受け付け、勝者が決まった時点で終了します。プレイヤーが無効な入力をした場合、再度入力を促します。

6. ゲームの開始

ゲームを開始するためには、play_game関数を呼び出します。

python
if __name__ == "__main__": play_game()

このコードは、スクリプトを実行するとゲームが始まるようにします。

まとめ

これで、PythonでFour-in-a-Row(四つ並べ)ゲームが完成しました。プレイヤーは交互にコマを置き、縦、横、斜めに4つ並べることで勝利します。ゲームは、ボードの状態が変化するたびに更新され、勝者が決まると終了します。

python
def create_board(): return [[" " for _ in range(7)] for _ in range(6)] def print_board(board): print("\n".join(["|".join(row) for row in board])) print("-" * 15) def valid_move(board, column): return 0 <= column < 7 and board[0][column] == " " def make_move(board, column, player): for row in range(5, -1, -1): if board[row][column] == " ": board[row][column] = player return row, column return -1, -1 def check_win(board, player): for row in range(6): for col in range(4): if all([board[row][col + i] == player for i in range(4)]): return True for row in range(3): for col in range(7): if all([board[row + i][col] == player for i in range(4)]): return True for row in range(3): for col in range(4): if all([board[row + i][col + i] == player for i in range(4)]): return True for row in range(3, 6): for col in range(4): if all([board[row - i][col + i] == player for i in range(4)]): return True return False def play_game(): board = create_board() current_player = "X" while True: print_board(board) column = int(input(f"プレイヤー {current_player} のターン。コマを置く列(0-6)を選んでください: ")) if not valid_move(board, column): print("無効な列です。もう一度選んでください。") continue row, col = make_move(board, column, current_player) if check_win(board, current_player): print_board(board) print(f"プレイヤー {current_player} の勝ちです!") break current_player = "O" if current_player == "X" else "X" if __name__ == "__main__": play_game()

これで、Pythonを使ったFour-in-a-Rowゲームの実装が完了しました。

Back to top button