三目並べゲームの作り方 Python   Code 例:

⚡ スマートサマリー

三目並べ Python これは、古典的な2人用グリッドゲームを再現した、初心者向けのプロジェクトです。このプロジェクトを構築することで、ループ、条件分岐、リスト、関数、再帰といった基本的なスキルを強化しながら、行、列、対角線をチェックして勝者を決定します。

  • 🎮 ゲームプレイ: 2人のプレイヤーが正方形のグリッド上にXとOをマークし、どちらかが行、列、または対角線を完成させるまでゲームを続ける。
  • 🧩 コアロジック: ネストされたリストは盤面を格納し、ループと条件分岐によってターンが制御され、勝利または引き分けが判定されます。
  • 🏗️ ビルド手順: ボードを作成し、最初のプレイヤーを選択し、入力を受け取り、セルをマークし、各ラウンドで勝者を確認します。
  • 🔁 リプレイ: 再帰的なplay()呼び出しは試合を再開し、入力検証によって占有されている手や範囲外の手はブロックされます。
  • 🤖 AIとの関連性: 同じボードは、ミニマックスアルゴリズムと強化学習エージェントにとって理想的な実験場となる。
  • 🛠️ ツール: のみ Python そして編集者は PyCharm 外部ライブラリは必要ありません。

三目並べゲームで Python

三目並べゲームで Python これは試してみる価値のある興味深いプロジェクトです。これは課題を解決するクールで楽しいプロジェクトであり、基本的な概念を習得するのに役立ちます。 Python楽しい三目並べゲームを作ることは、あなたのスキル向上に役立ちます。

良い Python 編集者など PyCharm またはコマンドラインインターフェース。

三目並べの遊び方

三目並べは、ゲーム盤を必要とせず誰でも遊べるシンプルな2人用ゲームです。2人のプレイヤーがそれぞれ異なるマスに印を付けていき、勝敗が決まるまでゲームを続けます。

三目並べの遊び方は以下の通りです。

ステップ1) 三目並べゲームは、正方形のマス目が空いている状態から始まります。これが三目並べの盤面です。

ステップ2) 両プレイヤーは XNUMX つのシンボル (通常は X または O) から選択します。 ゲーム内では他の任意の固有のシンボルを使用できます。

ステップ3) プレイヤーは順番に、三目並べの盤面のマスを埋めていき、いずれかのプレイヤーが勝ちとなる組み合わせ(行、列、または対角線全体を同じ符号で埋めること)を完成させるまで続けます。

ステップ4) すべてのマスが埋まり、明確な勝者がいない場合は、引き分けとなる可能性もあります。

要件

三目並べを作る Python このプロジェクトには、初心者レベルの理解が必要です。 Python プログラミング言語。これには、「for」ループと反復の理解、if文が何に使用されるかの理解が含まれます。 Python.

あなたも持っている必要があります Python と Python テキストエディタをコンピュータにインストールして、三目並べを完成させてください。 Python プロジェクト。これは初心者レベルの三目並べゲームなので、 Python何も必要ありません Python としょうかん。

コードのバグを解決するためには、デバッグスキルが必要になる場合があり、ゲームの構成要素についても十分な理解が必要です。

Tic Tac Toeの Python アルゴリズム

3目並べゲームを作成するには、次の手順に従ってください。 Python プログラミング言語:

ステップ1) 三目並べゲームを始めるための盤面を作成してください。

ステップ2) ゲームボードの寸法を決定するようユーザーに依頼します。

ステップ3) 最初のプレイヤーをランダムに選択します。

ステップ4) 三目並べゲームが始まります。

ステップ5) プレイヤーはボード上の空いている場所を選択してプレイします。

ステップ6) 選択した空のスポットをプレーヤーのサインで埋めます。

ステップ7) ゲーム ロジックを使用して、プレーヤーがゲームで勝つか引き分けになるかを判断します。

ステップ8) プレイヤーが勝てない場合、または XNUMX 番目のプレイヤーと引き分けになった場合は、毎回のプレイ後にゲーム ボードを表示します。

ステップ9) それぞれ引き分けまたは勝利のメッセージを表示します。

ステップ10) 三目並べゲームを終了し、新しいゲームを開始するオプションを表示します。

フル Python 三目並べのコード

# Guru99
# Code developed by Guru99.com
# Guru99 tic-tac-toe game
#Get input
def getInput(prompt, cast=None, condition=None, errorMessage=None):
  while True:
      try:
          val = cast(input(prompt))
          assert condition is None or condition(val)
          return val
      except:
          print(errorMessage or "Invalid input.")
# Print the game board
def printBoard(board):
  print()
  for row in board:
      print(*row)
  print()
# Check if player won using the winning combinations
def checkWin(board):
  # Check rows
  for row in range(len(board)):
      for col in range(len(board)-1):
          if board[row][col] == "_" or board[row][col+1] == "_" or board[row][col] != board[row][col+1]:
              break
      else:
          return True
  # Check column numbers
  for col in range(len(board)):
      for row in range(len(board)-1):
          if board[row][col] == "_" or board[row+1][col] == "_" or board[row][col] != board[row+1][col]:
              break
      else:
          return True
  # Check left diagonal
  for cell in range(len(board)-1):
      if board[cell][cell] == "_" or board[cell+1][cell+1] == "_" or board[cell][cell] != board[cell+1][cell+1]:
          break
  else:
      return True
  # Check right diagonal
  for cell in range(len(board)-1):
      emptyCell = board[cell][len(board)-cell-1] == "_" or board[cell+1][len(board)-cell-2] == "_"
      different = board[cell][len(board)-cell-1] != board[cell+1][len(board)-cell-2]
      if emptyCell or different:
          break
  else:
      return True
  # No win
  return False
# Play tic tac toe game
def play():
  # Introduction
  print("------------\nN-DIMENSIONAL TIC TAC TOE game by guru 99.com \n------------")
  # Set up variables
  N = getInput(prompt="Guru99 says>>> Enter N, the dimensions of the board: ",
               cast=int,
               condition=lambda x: x >= 3,
               errorMessage="Invalid input. Please enter an integer greater than or equal to 3 as explained on guru99.com")
  board = [['_'] * N for _ in range(N)]
  used = 0
  turn = 0
  # Play guru99 tic tac toe game in Python using while infinite loop
  while True:
      # Print guru99 tic tac toe game board
      printBoard(board)
      # Get user pick
      pick = getInput(prompt=f"Player {turn+1} - Pick location (row, col): ",
                      cast=lambda line: tuple(map(int, line.split(" "))),
                      condition=lambda pair: min(pair) >= 0 and max(pair) < N and board[pair[0]][pair[1]] == "_",
                      errorMessage="Invalid input. Please enter a valid, unoccupied location as an integer pair.")
      # Populate location
      board[pick[0]][pick[1]] = "X" if turn == 0 else "O"
      used += 1
      # Check for win
      #Guru99 tutorial
      if checkWin(board):
          printBoard(board)
          print(f"Game over, Player {turn+1} wins.")
          break
      # Check for tie
      elif used == N*N:
          printBoard(board)
          print("Game over. Players have tied the match.")
          print("Guru99.com tic tac toe game ")
          break
      # If no win yet, update next user
      turn = (turn+1)%2
  # Check for rematch
  playAgain = getInput(prompt="Play Guru99 tic tac toe_Game again? (y/n): ",
                       cast=str,
                       condition=lambda ans: ans.strip("\n").lower() in {"y", "n"},
                       errorMessage="Invalid input. Please enter 'y' or 'n'.")
  if playAgain == 'n':
      # End the game
      print("\nGuru99 TicTacToe game ended.")
      return
  else:
      # Rematch
      play()
# Main
if __name__ == '__main__':
  play()

Tic Tac Toeの Python Code 出力

上記のソースコードを実行すると、3×3の三目並べ盤面に対して以下のような出力が得られるはずです。

------------
N-DIMENSIONAL TIC TAC TOE game by guru 99.com
------------
Guru99 says>>> Enter N, the dimensions of the board: 3

_ _ _

_ _ _

_ _ _

Player 1 - Pick location (row, col): 1 1

_ _ _

_ X _

_ _ _

Player 2 - Pick location (row, col): 0 1

_ O _

_ X _

_ _ _

Player 1 - Pick location (row, col): 1 2

_ O _

_ X X

_ _ _

Player 2 - Pick location (row, col): 0 2

_ O O

_ X X

_ _ _

Player 1 - Pick location (row, col): 1 0

_ O O

X X X

_ _ _

Game over, Player 1 wins.
Play Guru99 tic tac toe_Game again? (y/n):

フル Code 内訳

作成 三目並べ Python 簡単です。各行で何が起こっているのかを理解するために、さまざまな機能を細かく分解してみましょう。

基板の印刷

三目並べの盤面がメインのゲーム画面です。 Pythonゲーム盤を表示するために、表示ウィンドウが使用されます。

以下に、三目並べのボードを作成する手順を示します。 Python:

Python 三目並べのコード

def getInput(prompt, cast=None, condition=None, errorMessage=None):
   while True:
       try:
           val = cast(input(prompt))
           assert condition is None or condition(val)
           return val
       except:
           print(errorMessage or "Invalid input.")
# Print the board
def printBoard(board):
   print()
   for row in board:
       print(*row)
   print()
N = getInput(prompt="Guru99 says>>> Enter N, the dimensions of the board: ",
            cast=int,
            condition=lambda x: x >= 3,
            errorMessage="Invalid input. Please enter an integer greater than or equal to 3 as explained on guru99.com")
board = [['_'] * N for _ in range(N)]
used = 0
turn = 0
printBoard(board)

Code 出力:

------------
N-DIMENSIONAL TIC TAC TOE game by guru 99.com
------------
Guru99 says>>> Enter N, the dimensions of the board: 3

_ _ _

_ _ _

_ _ _

三目並べゲーム – 勝利のアレンジメント

プレイヤーが勝ったかどうかを確認するには、行、列、対角線全体で勝利の組み合わせを確認する必要があります。 勝者がいる場合は、勝者のメッセージを表示する必要があります。

  • 行については、関数は連続する列のペアをすべて取得し、勝利の組み合わせをチェックします。
  • 最初に列を埋めたプレイヤーが勝ちです。 したがって、XNUMX番目のプレーヤーは負けます。
  • 連続する2つの列が同じであれば、その行内のすべての要素が同じであることは明らかです。
  • それらの XNUMX つが異なる場合、または行に空のセルが含まれている場合でも、勝者はいません。
  • 次に、負け条件を実装し、ブレークを追加します。 これらの負け条件のいずれかが当てはまる場合、チェックされた行には勝者がいませんでした。
  • else ステートメントは、勝者が存在することを示す true を返します。
  • ブレークはこのループから抜け出し、次の行に進みます。

コラム

列についても、行と同じ機能を繰り返します。 各プレイヤーが順位を選択した後、プレイヤーが勝ったかどうかを確認します。

斜めの列が勝ち

左対角線については、作業はより簡単になります。常に対角線上のセルを比較することになります。ただし、勝者がいない場合は、次の手順に進むことができます。

ゲームロジックをプレイする

これがゲームの主な機能です。 このために、情報を保存する変数を使用できます。

  • 最初の変数は「N」に格納される基板サイズです。 ゲームは、ユーザーに数値の入力を求めた後、ボードのサイズを取得します。
  • したがって、値を入力すると処理されます。
  • また、無効な数値が入力されたときにプレーヤーに表示するエラー メッセージも作成します。
  • 次に、セルが入力されたときに「X」または「O」を入力する XNUMX つの変数を作成できます。
  • 次に、プレイヤーにゲームボードを見せます。 この後、プレイヤーからの意見を受け取ります。
  • 次に、ロジックは選択したセルを塗りつぶしとしてマークし、勝ちか引き分けかをチェックします。
  • 勝者がいない場合、ゲームは次のプレイヤーにプレイを求めます。 勝ちまたは引き分けの場合、ゲームはユーザーに新しいゲームが必要かどうかを尋ねることができます。

よくあるご質問

はい。三目並べは、ループ、条件分岐、関数を使って実際に動作するゲームを作る、初心者向けの定番プロジェクトです。自信をつけ、基本的な構文を強化し、外部ライブラリを使わずに、より大規模なプロジェクトに取り組むための準備ができます。

これは、ボードのためのネストされたリスト、ターンのためのforループとwhileループ、勝敗判定のためのif文、構造のための関数、そして再開のための再帰を強化します。これらの基礎は、より高度な内容に直接応用できます。 Python プログラム。

はい。コンソール版以外にも、TkinterやPygameといったライブラリを使うことで、クリック可能なボタン、描画グリッド、マウス入力などを追加できます。ゲームのロジックは変わりません。変更されるのは表示レイヤーと入力レイヤーだけです。

三目並べは攻略済みのゲームです。両プレイヤーが最適にプレイすれば、あらゆる脅威を阻止できるため、どちらかが勝利を強制することはできません。そのため、人間であれコンピューターであれ、完璧な対戦は必ず引き分けに終わります。

基本的なコンソール版であれば、ループと条件分岐に慣れれば、初心者でも1~3時間で作成できます。入力検証機能、スケーラブルなボード、グラフィカルインターフェースなどを追加すると、プロジェクトは週末の練習期間を要するでしょう。

プレイヤーの1人をミニマックス関数に置き換えます。この関数は、考えられるすべての手を再帰的に探索し、勝ち負けと引き分けを記録した後、最も確実な結果が得られる手を選択します。小さな盤面では、この方法によってコンピュータに勝つことは不可能になります。

はい。Q学習などの強化学習エージェントは、何千ものゲームをプレイし、勝利した手を報酬として与えることで改善します。ボードは配列として保存され、 NumPyこれにより、ハードコーディングされたルールなしに、モデルがほぼ最適な戦略を学習できるようになります。

はい。GitHub Copilotや同様のAIアシスタントを使えば、簡単な指示だけで盤面構成、ターンループ、チェックの勝ち方などを自動生成できます。出力結果を最初のドラフトとして扱い、引き分けや無効な手などの例外的なケースは自分でテストしてください。