Я недавно создал игру ti c ta c toe с функцией min-max. Тем не менее, я получаю сообщение об ошибке переполнения стека и глубины рекурсии. Как бы вы оптимизировали это так, чтобы этого не произошло. Первоначально я создал игру Ti c Ta c Toe. Затем я включил алгоритм min-max. Если так или иначе, чтобы сделать код быстрее или оптимизировать функцию. Это действительно поможет, спасибо
board = ["."] * 9
wining_comb = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[3,4,6],[0,4,8]]
game = True
key = {
"x": 1,
"O":-1,
}
def new_board():
print (board[0] + "|" + board[1] + "|" + board[2])
print (board[3] + "|" + board[4] + "|" + board[5])
print (board[6] + "|" + board[7] + "|" + board[8])
new_board()
def wining(comb):
global game
for l in range(len(wining_comb)):
a = wining_comb[l][0]
f = wining_comb[l][1]
v = wining_comb[l][2]
if comb[a] == comb[f] == comb[v] == "O" or "x" == comb[a] == comb[f] == comb[v]:
game = False
return a
break
else:
game = True
break
def minmax(board,depth, ismax):
if wining(board) != None:
score = key[wining(board)]
return score
else:
if ismax == True:
bestscore = float('-inf')
for k in range(len(board)):
if board[k] == ".":
board[k] == "x"
score = minmax(board,depth+1,False)
board[k] == '.'
bestscore = max(bestscore, score)
return bestscore
else:
bestscore = float('inf')
for k in range(len(board)):
if board[k] == ".":
board[k] == "O"
score = minmax(board,depth+1,True)
board[k] == '.'
bestscore = min(bestscore,score)
return bestscore
def player1() :
bestscore = float('inf')
bestmove = 0
for k in range(len(board)):
if board[k] == ".":
board[k] == "x"
score = minmax(board,0, False)
board[k] == "."
if score > bestscore:
bestscore = score
bestmove = k
board[bestmove] = "x"
new_board()
def player2():
number = int(input("Please enter your poistion?") )
board[number - 1 ] = "O"
new_board()
wining(board)
while game==True:
player1()
player2()