Как сделать игру «Крестики-нолики» в Python с Code Пример

⚡ Умное резюме

Крестики-нолики в Python Это простой в освоении проект, воссоздающий классическую игру в сетку для двух игроков. Его создание развивает основные навыки, такие как циклы, условные операторы, списки, функции и рекурсия, а также позволяет определить победителя по строкам, столбцам и диагоналям.

  • 🎮 Геймплей: Два игрока ставят крестики X и нолики на квадратной сетке до тех пор, пока один из них не завершит строку, столбец или диагональ.
  • 🧩 Основная логика: Вложенные списки хранят игровое поле, а циклы и условные операторы определяют ходы и выявляют победу или ничью.
  • ???? ️ Шаги сборки: Создайте игровое поле, выберите первого игрока, введите данные, отметьте ячейки, а затем проверяйте победителя в каждом раунде.
  • 🔁 Replay: Рекурсивный вызов функции play() перезапускает матч, а проверка ввода блокирует занятые или выходящие за пределы диапазона ходы.
  • 🤖 Актуальность ИИ: Эта же доска идеально подходит для отработки алгоритма минимакса и работы агентов, использующих обучение с подкреплением.
  • 🇧🇷 Инструменты: Только приблизительно Python и редактор, например PyCharm Необходимы; внешние библиотеки не требуются.

Игра в крестики-нолики Python

Игра в крестики-нолики Python Это интересный проект, который вы можете попробовать. Это классный и увлекательный проект, в котором нужно решить сложную задачу, и он может помочь вам освоить базовые понятия. PythonСоздание увлекательной игры в крестики-нолики поможет вам развить свои навыки.

Вы можете использовать хороший Python редактор, такой как PyCharm или через интерфейс командной строки.

Как играть в крестики-нолики?

Крестики-нолики — это простая игра для двух игроков, в которую может играть любой, даже без игрового поля. В ней два игрока отмечают разные клетки, пока игра не закончится победой или ничьей.

Вот как играть в крестики-нолики.

Шаг 1) Игра в крестики-нолики начинается с пустых клеток в квадратной сетке. Это игровое поле для крестиков-ноликов.

Шаг 2) Оба игрока выбирают один из двух символов, обычно X или O. Вы можете использовать любой другой уникальный символ в игре.

Шаг 3) Текущий игрок по очереди отмечает ходы, заполняя ячейки игрового поля «Крестики-нолики», пока один из игроков не соберет выигрышную комбинацию. Это означает заполнение целого ряда, столбца или диагонали одинаковым знаком.

Шаг 4) Ничья в игре также возможна в случае, если все ячейки заполнены и явный победитель не определен.

Требования

Создание игры в крестики-нолики Python Для выполнения проекта требуется начальный уровень понимания... Python Язык программирования. Он включает в себя понимание циклов «for» и итераций, а также того, для чего используется оператор if. Python.

Вам также необходимо иметь Python и Python Для завершения игры в крестики-нолики на вашем компьютере должен быть установлен текстовый редактор. Python проект. Поскольку это игра в крестики-нолики для начинающих, Python, вам ничего не понадобится Python библиотека.

Для поиска решений проблем в коде вам могут понадобиться навыки отладки, а также достаточное понимание компонентов игры.

Tic Tac Toe Python Алгоритм

Выполните следующие шаги, чтобы создать игру «Крестики-нолики». Python язык программирования:

Шаг 1) Создайте игровое поле, чтобы начать игру в крестики-нолики.

Шаг 2) Попросите пользователя определиться с размерами игрового поля.

Шаг 3) Случайным образом выберите первого игрока.

Шаг 4) Игра в крестики-нолики начинается.

Шаг 5) Игроки играют, выбирая пустое место на доске.

Шаг 6) Заполните пустое выбранное место знаком игрока.

Шаг 7) Определите, выиграет ли игрок или получит ничью в игре, используя игровую логику.

Шаг 8) Показывайте игровое поле после каждой игры, если ни один из игроков не выиграл или не получил ничью со вторым игроком.

Шаг 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 Breakdown

Создающий Крестики-нолики в 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

_ _ _

_ _ _

_ _ _

Игра «Крестики-нолики» – выигрышная комбинация

Чтобы проверить, выиграл ли какой-либо игрок, нам нужно проверить выигрышные комбинации по строкам, столбцам и диагоналям. Если есть победитель, нам нужно показать выигрышное сообщение.

Ряды

  • Для строки функция берет каждую последовательную пару столбцов и проверяет наличие выигрышной комбинации.
  • Побеждает тот, кто первым заполнит ряды. Таким образом, второй игрок проигрывает.
  • Если пара последовательных столбцов одинаковы, то очевидно, что все элементы в этой строке одинаковы.
  • Если два из них разные или строка содержит пустую ячейку, победителя все равно нет.
  • Затем мы реализуем проигрышные условия и добавляем перерыв. Если какое-либо из этих проигрышных условий верно, у нас не было победителя в отмеченной строке.
  • Оператор else дает истинный возврат, показывая, что есть победитель.
  • Разрыв выходит из этого цикла и переходит к следующей строке.

Колонки

Для столбцов повторяем ту же функцию, что и для строк. Мы проверяем, выиграл ли игрок, после того, как каждый игрок выбрал свое место.

Диагональный ряд выигрывает

Для левой диагонали задача упрощается. Мы всегда будем сравнивать ячейки по диагоналям. Однако, если победителя нет, мы можем перейти к следующему шагу.

Играйте в логическую игру

Это основная функция игры. Для этого мы можем использовать переменные, хранящие информацию.

  • Первая переменная — это размер платы, хранящийся в «N». Игра получит размер доски после того, как пользователю будет предложено ввести число.
  • Итак, когда вы вводите значение, оно обрабатывается.
  • Мы также создаем сообщение об ошибке, чтобы показать игрокам, когда введен какой-либо неверный номер.
  • Затем мы можем создать две переменные, которые заполнят «X» или «O» при заполнении ячейки.
  • Затем покажите игрокам игровое поле. После этого получите данные от игрока.
  • Затем логика пометит выбранную ячейку как заполненную и проверит наличие выигрыша или ничьей.
  • Если победителя нет, игра предлагает сыграть следующему игроку. Если есть победа или ничья, игра может спросить пользователей, хотят ли они новую игру.

Часто задаваемые вопросы (FAQ)

Да. Крестики-нолики — это классический проект для начинающих, который превращает циклы, условные операторы и функции в работающую игру. Он укрепляет уверенность, закрепляет базовый синтаксис и готовит к более крупным проектам без необходимости использования каких-либо внешних библиотек.

Она закрепляет навыки работы с вложенными списками для игрового поля, циклами for и while для обозначения ходов, условными операторами if для проверки выигрыша, функциями для структурирования и рекурсией для перезапуска игры. Эти фундаментальные принципы напрямую переносятся на более сложные уровни. Python программ.

Да. Помимо консольной версии, такие библиотеки, как Tkinter и Pygame, добавляют кликабельные кнопки, нарисованную сетку и ввод с мыши. Логика игры остается прежней; меняются только слои отображения и ввода.

Крестики-нолики — это игра, в которой все решено. Когда оба игрока играют оптимально, любую угрозу можно заблокировать, поэтому никто не может добиться победы. Именно поэтому безупречный матч, будь то игра человека или компьютера, всегда заканчивается ничьей.

Простейшая консольная версия занимает у новичка от одного до трех часов, как только он освоит циклы и условные операторы. Добавление проверки входных данных, масштабируемой платы или графического интерфейса позволяет продлить проект до выходных, посвященных практике.

Замените одного игрока функцией минимакса. Она рекурсивно исследует все возможные ходы, подсчитывая победы, поражения и ничьи, а затем выбирает ход с наилучшим гарантированным результатом. На небольшой доске это делает компьютер практически непобедимым.

Да. Агенты обучения с подкреплением, такие как Q-обучение, совершенствуются, играя тысячи игр и вознаграждая выигрышные ходы. Доски хранятся в виде массивов. NumPyэто позволяет модели изучить почти оптимальную стратегию без жестко заданных правил.

Да. GitHub Copilot и аналогичные ИИ-помощники могут создавать структуру доски, цикл ходов и выигрывать шах по короткому запросу. Рассматривайте результат как черновик, а затем самостоятельно проверяйте граничные случаи, такие как ничьи и недопустимые ходы.

Подведем итог этой публикации следующим образом: