Four-in-a-Row(四つ並べ)ゲームのプログラム
Four-in-a-Row(四つ並べ)は、2人で遊ぶボードゲームで、プレイヤーは交互にコマを縦または横、または斜めに4つ並べることを目指します。このゲームは、いわゆる「Connect Four(コネクトフォー)」としても知られています。
ここでは、Pythonを使用してこのゲームを実装する方法について詳しく説明します。最初にゲームボードを作成し、プレイヤーの入力を受け付け、勝者を判定するロジックを構築します。

1. ゲームボードの作成
まず、ゲームボードを二次元リストとして作成します。ボードは6行7列の格子状で、プレイヤーがコマを置くことができます。コマは「X」または「O」で表現します。
pythondef create_board():
board = [[" " for _ in range(7)] for _ in range(6)]
return board
ここでは、create_board
関数で6行7列の空のボードを作成しています。リスト内の空白文字 " "
は、まだコマが置かれていないセルを示します。
2. ゲームボードの表示
次に、ゲームボードをコンソールに表示する関数を作成します。
pythondef print_board(board):
print("\n".join(["|".join(row) for row in board]))
print("-" * 15)
この関数は、ボードの各行を縦に区切り、各列を「|」で区切って出力します。また、ボードの下には区切り線を表示します。
3. プレイヤーの入力
プレイヤーがコマを置く列を選ぶための関数を作成します。この関数は、選択された列にコマを置くことができるかどうかを確認します。
pythondef 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つ並んだコマをチェックする関数を作成します。
pythondef 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. ゲームの進行
ゲームの進行を管理するメインの関数を作成します。この関数は、プレイヤー交代と勝者の判定を行います。
pythondef 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
関数を呼び出します。
pythonif __name__ == "__main__":
play_game()
このコードは、スクリプトを実行するとゲームが始まるようにします。
まとめ
これで、PythonでFour-in-a-Row(四つ並べ)ゲームが完成しました。プレイヤーは交互にコマを置き、縦、横、斜めに4つ並べることで勝利します。ゲームは、ボードの状態が変化するたびに更新され、勝者が決まると終了します。
pythondef 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ゲームの実装が完了しました。