Нет ошибок в выполнении кода, но вывод алгоритма минимакса неверен, пожалуйста, посмотрите, `
функция AI_makemove вызывается из основного цикла, а board_state является копией самой платы.
Функция AI_makemove должна возвращать лучший ход компьютера против пользователя, board_state - текущее состояние доски, глубина - количество позиций, заполненных на доске, функция check_if_won возвращает true, если состояние является выигрышным состоянием для текущий игрок.
def AI_makemove(board_state , isAI , depth):
temp_board = copy.deepcopy(board_state)
depth+=1
print(temp_board , depth , isAI)
if isAI:
bestVal = -9999
a = b = 0
for i in range(0,3):
for j in range(0,3):
if temp_board[i][j] == 0:
temp_board1 = copy.deepcopy(temp_board)
temp_board1[i][j] = 2
if check_if_won(2,temp_board1):
return [1 , i, j]
if depth == 9:
return [bestVal , a ,b]
l = AI_makemove(temp_board1,False,depth)
if int(l[0]) > bestVal:
bestVal = int(l[0])
a = int(l[1])
b = int(l[2])
else:
bestVal = +9999
a = b = 0
for i in range(0, 3):
for j in range(0, 3):
if temp_board[i][j] == 0:
temp_board1 = copy.deepcopy(temp_board)
temp_board1[i][j] = 1
if check_if_won(1,temp_board1):
return [-1 , i, j]
if depth == 9:
return [bestVal , a ,b]
l = AI_makemove(temp_board1,True,depth)
if int(l[0]) < bestVal:
bestVal = int(l[0])
a = int(l[1])
b = int(l[2])
return [bestVal , a ,b]