Игра в Крестики-Нолики

Run Settings
LanguagePython
Language Version
Run Command
import random def print_board(board): # Выводим текущее состояние доски for row in board: print(" ".join(row)) print() def check_winner(board, player): # Проверяем, есть ли выигрышные комбинации для данного игрока # Проверяем строки и столбцы for row in board: if all(cell == player for cell in row): return True for col in range(3): if all(board[row][col] == player for row in range(3)): return True # Проверяем диагонали if all(board[i][i] == player for i in range(3)) or all(board[i][2 - i] == player for i in range(3)): return True return False def get_available_moves(board): # Возвращаем список доступных пустых клеток на доске return [(row, col) for row in range(3) for col in range(3) if board[row][col] == " "] def make_move(board, player, row, col): # Делаем ход игрока на доске board[row][col] = player def is_board_full(board): # Проверяем, заполнена ли доска полностью return all(board[row][col] != " " for row in range(3) for col in range(3)) def play_game(): # Инициализация доски и игроков board = [[" " for _ in range(3)] for _ in range(3)] players = ["X", "O"] current_player = random.choice(players) while True: print_board(board) print(f"Player {current_player}'s turn.") if current_player == "X": # Ход игрока X (человека) while True: try: row, col = map(int, input("Enter row and column (0-2) separated by space: ").split()) if (0 <= row < 3) and (0 <= col < 3) and (board[row][col] == " "): break else: print("Invalid move. Try again.") except ValueError: print("Invalid input. Please enter two integers separated by a space.") print() else: # Ход ИИ (случайный выбор из доступных клеток) available_moves = get_available_moves(board) row, col = random.choice(available_moves) make_move(board, current_player, row, col) if check_winner(board, current_player): print_board(board) print(f"Player {current_player} wins!") break elif is_board_full(board): print_board(board) print("It's a draw!") break # Переключение игроков current_player = "X" if current_player == "O" else "O" # Запуск игры play_game() def test_check_winner(): board1 = [ ["X", "X", "X"], [" ", "O", "O"], [" ", "O", " "] ] assert check_winner(board1, "X") == True board2 = [ ["O", "X", "X"], ["O", "X", "O"], ["X", "O", "X"] ] assert check_winner(board2, "X") == True board3 = [ ["O", "X", "X"], ["X", "O", "O"], ["O", "X", "X"] ] assert check_winner(board3, "X") == False def test_get_available_moves(): board = [ ["X", " ", "O"], [" ", "O", "X"], ["X", " ", " "] ] assert get_available_moves(board) == [(0, 1), (2, 1), (2, 2)] def test_is_board_full(): board1 = [ ["X", "O", "X"], ["O", "X", "O"], ["O", "X", "O"] ] assert is_board_full(board1) == True board2 = [ ["X", "O", "X"], ["O", "X", "O"], ["O", "X", " "] ] assert is_board_full(board2) == False # Запуск тестов test_check_winner() test_get_available_moves() test_is_board_full() print("All tests passed!")
Editor Settings
Theme
Key bindings
Full width
Lines