import random
def drawBoard(board):
# Рисует игровое поле
print(' | |')
print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
print(' | |')
print('-----------')
print(' | |')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
print(' | |')
print('-----------')
print(' | |')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
print(' | |')
def isWinner(board, letter):
# Проверяет, выиграл ли игрок с указанной буквой
win_combinations = [
[1,2,3], [4,5,6], [7,8,9], # горизонтали
[1,4,7], [2,5,8], [3,6,9], # вертикали
[1,5,9], [3,5,7] # диагонали
]
for combo in win_combinations:
if all(board[i] == letter for i in combo):
return True
return False
def isBoardFull(board):
# Проверяет, заполнена ли доска
return all(board[i] != ' ' for i in range(1, 10))
def free(board, movesList):
# Возвращает список свободных ячеек из переданного списка
possibleMoves = []
for i in movesList:
if board[i] == ' ':
possibleMoves.append(i)
return possibleMoves
def randomMove(board, movesList):
# Случайный ход из списка возможных
possibleMoves = free(board, movesList)
if len(possibleMoves) != 0:
return random.choice(possibleMoves)
else:
return None
def getComputerMove(board):
# Умный ход компьютера
possibleMoves = free(board, [1,2,3,4,5,6,7,8,9])
# Проверка: может ли компьютер выиграть
for i in possibleMoves:
board[i] = computerLetter
if isWinner(board, computerLetter):
board[i] = ' '
return i
board[i] = ' '
# Проверка: может ли игрок выиграть? Если да, блокируем
for i in possibleMoves:
board[i] = playerLetter
if isWinner(board, playerLetter):
board[i] = ' '
return i
board[i] = ' '
# Попытка занять углы
move = randomMove(board, [1,3,7,9])
if move != None:
return move
# Если углы заняты, центр
if board[5] == ' ':
return 5
# Иначе любой из боковых
return randomMove(board, [2,4,6,8])