Cách tạo trò chơi Tic Tac Toe trong Python với Code Ví dụ

⚡ Tóm tắt thông minh

Tic Tac Toe trong Python Đây là một dự án thân thiện với người mới bắt đầu, tái hiện trò chơi lưới hai người chơi kinh điển. Việc xây dựng trò chơi này giúp củng cố các kỹ năng cốt lõi như vòng lặp, câu lệnh điều kiện, danh sách, hàm và đệ quy khi kiểm tra các hàng, cột và đường chéo để tìm ra người chiến thắng.

  • 🎮 Gameplay: Hai người chơi đánh dấu X và O trên một lưới vuông cho đến khi một người hoàn thành một hàng, cột hoặc đường chéo.
  • 🧩 Nguyên tắc cốt lõi: Các danh sách lồng nhau lưu trữ bàn cờ trong khi các vòng lặp và câu lệnh điều khiển lượt chơi và phát hiện thắng hoặc hòa.
  • 🏗️ Các bước xây dựng: Tạo bàn cờ, chọn người chơi đầu tiên, nhập thông tin, đánh dấu các ô, sau đó kiểm tra người thắng cuộc mỗi vòng.
  • 🔁 Replay: Lệnh gọi đệ quy play() sẽ khởi động lại trận đấu, và việc xác thực đầu vào sẽ chặn các nước đi bị chiếm dụng hoặc nằm ngoài phạm vi.
  • 🤖 Tầm quan trọng của AI: Cùng một bàn cờ này là một sân chơi lý tưởng cho thuật toán minimax và các tác nhân học tăng cường.
  • 🛠️ Công cụ: Chỉ có Python và một biên tập viên như PyCharm Các thư viện này là cần thiết; không cần thư viện bên ngoài nào cả.

Trò chơi Tic Tac Toe trong Python

Trò chơi Tic Tac Toe trong Python Đây là một dự án thú vị mà bạn có thể thử. Đó là một dự án hay và vui nhộn, giúp bạn giải quyết một thử thách và có thể giúp bạn nắm vững các khái niệm cơ bản trong... PythonViệc tạo ra một trò chơi Tic Tac Toe thú vị sẽ giúp bạn nâng cao kỹ năng của mình.

Bạn có thể sử dụng một cái gì đó tốt Python biên tập viên chẳng hạn như PyCharm hoặc giao diện dòng lệnh.

Cách chơi cờ caro?

Cờ caro là một trò chơi đơn giản dành cho hai người chơi mà bất cứ ai cũng có thể chơi mà không cần bàn cờ. Trò chơi bao gồm hai người chơi đánh dấu vào các ô khác nhau cho đến khi kết thúc với chiến thắng hoặc hòa.

Dưới đây là cách chơi trò chơi Tic Tac Toe.

Bước 1) Trò chơi Tic Tac Toe bắt đầu với các ô trống trong một lưới vuông. Đây chính là bàn cờ Tic Tac Toe.

Bước 2) Cả hai người chơi đều chọn một trong hai biểu tượng, thường là X hoặc Os. Bạn có thể sử dụng bất kỳ biểu tượng độc đáo nào khác trong trò chơi.

Bước 3) Người chơi hiện tại lần lượt đánh dấu bằng cách điền vào các ô trên bàn cờ Tic Tac Toe cho đến khi một người chơi tạo được tổ hợp chiến thắng. Đó là toàn bộ một hàng, cột hoặc đường chéo có cùng dấu.

Bước 4) Trò chơi cũng có thể kết thúc hòa nếu tất cả các ô đều đã được điền đầy mà không có người thắng cuộc rõ ràng.

Yêu cầu

Xây dựng trò chơi Tic Tac Toe Python Dự án này đòi hỏi sự hiểu biết ở mức độ cơ bản về... Python Ngôn ngữ lập trình. Nó bao gồm việc hiểu về vòng lặp “for” và các phép lặp, cũng như công dụng của câu lệnh if trong lập trình. Python.

Bạn cũng cần phải có Python và Python Trình soạn thảo văn bản được cài đặt trên máy tính của bạn để hoàn thành trò chơi Tic Tac Toe. Python dự án. Vì đây là trò chơi Tic Tac Toe dành cho người mới bắt đầu trong PythonBạn sẽ không cần bất kỳ Python thư viện.

Bạn có thể cần một số kỹ năng gỡ lỗi để tìm ra giải pháp cho các lỗi trong mã của mình, và bạn cũng cần có hiểu biết đầy đủ về các thành phần của trò chơi.

Tic Tac Toe Python Thuật toán

Hãy làm theo các bước sau để tạo trò chơi Tic Tac Toe trong Python ngôn ngữ lập trình:

Bước 1) Hãy tạo bàn cờ để bắt đầu trò chơi Tic Tac Toe.

Bước 2) Yêu cầu người dùng quyết định kích thước bảng trò chơi.

Bước 3) Chọn ngẫu nhiên người chơi đầu tiên.

Bước 4) Trò chơi cờ caro bắt đầu.

Bước 5) Người chơi chơi bằng cách chọn một chỗ trống trên bảng.

Bước 6) Điền vào chỗ trống đã chọn bằng dấu hiệu của người chơi.

Bước 7) Xác định xem người chơi thắng hay hòa trong trò chơi bằng cách sử dụng logic trò chơi.

Bước 8) Hiển thị bảng trò chơi sau mỗi lần chơi nếu không có người chơi nào thắng hoặc hòa với người chơi thứ hai.

Bước 9) Hiển thị thông báo hòa hoặc thắng tương ứng.

Bước 10) Kết thúc trò chơi Tic Tac Toe với các tùy chọn để bắt đầu một trò chơi mới.

Full Python mã cho tic tac toe

# 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 đầu ra

Sau khi chạy đoạn mã nguồn ở trên, dưới đây là kết quả dự kiến ​​cho bàn cờ caro 3x3:

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

Full Code Breakdown

Tạo Tic Tac Toe trong Python Rất đơn giản. Chúng ta hãy cùng phân tích từng chức năng riêng lẻ để hiểu điều gì đang diễn ra ở mỗi dòng:

In bảng

Bàn cờ caro là màn hình hiển thị chính của trò chơi. Trong PythonMột cửa sổ hiển thị được sử dụng để hiển thị bàn cờ.

Dưới đây là các bước giúp bạn tạo bàn cờ caro trong trò chơi Tic Tac Toe. Python:

Python mã cho Tic Tac Toe

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 đầu ra:

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

_ _ _

_ _ _

_ _ _

Trò chơi Tic Tac Toe – dàn xếp chiến thắng

Để kiểm tra xem có người chơi nào thắng hay không, chúng ta cần kiểm tra các kết hợp chiến thắng theo hàng, cột và đường chéo. Nếu có người chiến thắng, chúng ta cần hiển thị thông điệp chiến thắng.

Hàng

  • Đối với hàng, hàm lấy từng cặp cột liên tiếp và kiểm tra kết hợp chiến thắng.
  • Người chơi đầu tiên điền vào các hàng sẽ thắng. Người chơi thứ hai do đó thua cuộc.
  • Nếu hai cột liên tiếp có cùng một hàng, thì rõ ràng tất cả các phần tử trong hàng đó đều giống nhau.
  • Nếu hai trong số chúng khác nhau hoặc hàng chứa một ô trống thì vẫn không có người chiến thắng.
  • Sau đó chúng tôi thực hiện các điều kiện mất và thêm thời gian nghỉ. Nếu bất kỳ điều kiện thua nào trong số này là đúng thì chúng ta không có người chiến thắng ở hàng đã chọn.
  • Câu lệnh else mang lại kết quả thực sự để cho thấy rằng có người chiến thắng.
  • Việc ngắt sẽ thoát ra khỏi vòng lặp này để chuyển sang hàng tiếp theo.

Cột

Đối với các cột, chúng ta lặp lại chức năng tương tự như đối với các hàng. Chúng tôi kiểm tra xem người chơi có thắng hay không sau khi mỗi người chơi chọn vị trí của mình.

Hàng chéo thắng

Đối với đường chéo bên trái, nhiệm vụ trở nên đơn giản hơn. Chúng ta luôn so sánh các ô trên các đường chéo. Tuy nhiên, trong trường hợp không có ô nào thắng cuộc, chúng ta có thể chuyển sang hướng dẫn tiếp theo.

Chơi trò chơi logic

Đây là chức năng chính của trò chơi. Để làm được điều này, chúng ta có thể sử dụng các biến lưu trữ thông tin.

  • Biến đầu tiên là kích thước bảng được lưu trữ trong “N”. Trò chơi sẽ lấy kích thước bảng sau khi yêu cầu người dùng nhập số.
  • Vì vậy, khi bạn nhập giá trị, nó sẽ được xử lý.
  • Chúng tôi cũng tạo một thông báo lỗi để hiển thị cho người chơi khi nhập bất kỳ số nào không hợp lệ.
  • Sau đó, chúng ta có thể tạo hai biến điền vào chữ “X” hoặc “O” khi một ô được điền.
  • Sau đó cho người chơi xem bảng trò chơi. Sau đó, lấy đầu vào của người chơi.
  • Sau đó, logic sẽ đánh dấu ô đã chọn là đã điền và kiểm tra xem thắng hay hòa.
  • Nếu không có người chiến thắng, trò chơi sẽ yêu cầu người chơi tiếp theo chơi. Nếu thắng hoặc hòa, trò chơi có thể hỏi người dùng xem họ có muốn chơi trò chơi mới không.

Câu Hỏi Thường Gặp

Đúng vậy. Cờ caro là một dự án kinh điển dành cho người mới bắt đầu, biến các vòng lặp, câu lệnh điều kiện và hàm thành một trò chơi hoạt động. Nó giúp bạn tự tin hơn, củng cố cú pháp cốt lõi và chuẩn bị cho các dự án lớn hơn mà không cần bất kỳ thư viện bên ngoài nào.

Nó củng cố kiến ​​thức về danh sách lồng nhau cho bảng, vòng lặp for và while cho lượt chơi, câu lệnh if để kiểm tra thắng thua, hàm cho cấu trúc và đệ quy để khởi động lại. Những kiến ​​thức cơ bản này có thể áp dụng trực tiếp vào các lập trình nâng cao hơn. Python chương trình.

Đúng vậy. Ngoài phiên bản dành cho máy chơi game, các thư viện như Tkinter và Pygame còn bổ sung thêm các nút có thể nhấp chuột, lưới vẽ và nhập liệu bằng chuột. Logic trò chơi vẫn giữ nguyên; chỉ có lớp hiển thị và lớp nhập liệu thay đổi.

Cờ caro là một trò chơi đã được giải quyết. Khi cả hai người chơi đều chơi tối ưu, mọi mối đe dọa đều có thể bị chặn lại, vì vậy không ai có thể ép buộc chiến thắng. Đó là lý do tại sao một trận đấu hoàn hảo, dù là giữa người chơi hay máy tính, luôn kết thúc với tỷ số hòa.

Phiên bản điều khiển cơ bản mất từ ​​một đến ba giờ để người mới bắt đầu làm quen, sau khi đã nắm vững các vòng lặp và câu lệnh điều kiện. Việc thêm tính năng kiểm tra dữ liệu đầu vào, bảng điều khiển có thể mở rộng hoặc giao diện đồ họa sẽ kéo dài dự án trong một cuối tuần thực hành.

Thay thế một người chơi bằng một hàm minimax. Hàm này sẽ khám phá đệ quy mọi nước đi có thể, ghi điểm thắng, thua và hòa, sau đó chọn nước đi mang lại kết quả tốt nhất được đảm bảo. Trên một bàn cờ nhỏ, điều này khiến máy tính không thể bị đánh bại.

Đúng vậy. Các thuật toán học tăng cường như Q-learning cải thiện bằng cách chơi hàng nghìn ván và thưởng cho những nước đi thắng cuộc. Các bàn cờ được lưu trữ dưới dạng mảng với numpy, cho phép mô hình học được chiến lược gần tối ưu mà không cần các quy tắc được mã hóa cứng.

Đúng vậy. GitHub Copilot và các trợ lý AI tương tự có thể xây dựng cấu trúc bàn cờ, vòng lặp lượt chơi và kiểm tra thắng thua chỉ từ một vài gợi ý ngắn gọn. Hãy coi kết quả đầu ra như bản nháp đầu tiên, sau đó tự mình kiểm tra các trường hợp ngoại lệ như hòa và nước đi không hợp lệ.

Tóm tắt bài viết này với: