import random
def print_board(board):
for row in board:
print(" | ".join(row))
print("-" * (len(row) * 4 - 1))
def check_winner(board, player):
n = len(board)
# Check rows
for row in board:
if all(cell == player for cell in row):
return True
# Check columns
for col in range(n):
if all(board[row][col] == player for row in range(n)):
return True
# Check diagonals
if all(board[i][i] == player for i in range(n)):
return True
if all(board[i][n-1-i] == player for i in range(n)):
return True
return False
def is_board_full(board):
return all(cell != ' ' for row in board for cell in row)
def get_computer_move(board):
empty_cells = [(i, j) for i, row in enumerate(board) for j, cell in enumerate(row) if cell == ' ']
return random.choice(empty_cells)
def main():
size = int(input("Введите размер поля (например, 3 для поля 3x3): "))
board = [[' ' for _ in range(size)] for _ in range(size)]
print_board(board)
current_player = "X"
while True:
if current_player == "X":
row = int(input("Введите номер строки (0-{}): ".format(size - 1)))
col = int(input("Введите номер столбца (0-{}): ".format(size - 1)))
if board[row][col] != ' ':
print("Эта ячейка уже занята. Попробуйте снова.")
continue
board[row][col] = "X"
else:
row, col = get_computer_move(board)
board[row][col] = "O"
print("Компьютер выбрал ячейку ({}, {})".format(row, col))
print_board(board)
if check_winner(board, current_player):
print("Игрок {} выиграл!".format(current_player))
break
if is_board_full(board):
print("Ничья!")
break
current_player = "O" if current_player == "X" else "X"
if __name__ == "__main__":
main()
Как это работает:
Программа запрашивает у пользователя размер поля.
Игровое поле создается с указанным размером.
Игрок и компьютер по очереди делают ходы. Игрок вводит координаты для своего хода, а компьютер случайным образом выбирает свободную ячейку для своего хода.
После каждого хода проверяется, выиграл ли кто-то или закончились ли свободные ячейки.
Игра заканчивается, когда кто-то выигрывает или все ячейки заняты.