CHOICE = 0;
def score(State, Depth):
if(conditionX(State)):
return 10 - Depth
elif(conditionO(State)):
return Depth - 10
return 0
def minimax(State, Depth):
if(condition(State)): return score(State, Depth)
scores =[-1000]
moves = [0]
possibleState = ()
for index in range(1,10):
if(not index in State[0] and not index in State[1]):
if(State[2]%2==0):
newState = State[1]
newState.append(index)
possibleState += (State[0],newState,State[2]+1)
scores.append(minimax(possibleState, Depth + 1))
moves.append(index)
elif(State[2]%2!=0):
newState = State[0]
newState.append(index)
possibleState += (newState,State[1],State[2]+1)
scores.append(minimax(possibleState, Depth + 1))
moves.append(index)
maxItem = max(scores)
maxIndex = scores.index(maxItem)
global CHOICE
CHOICE = moves[maxIndex]
return max(scores)
我不知道为什么代码总是播放一次而不是返回每一个可能的移动。每次运行时打印状态显示它只运行一次
([5],[],0)
([5],[1],1)
([5,2],[1],2)
([5,2],[1,3],3)
([5,2,4],[1,3],4)
([5,2,4],[1,3,6],5)
([5,2,4,7],[1,3,6],6)
([5,2,4,7],[1,3,6,8],7)
([5,2,4,7,9],[1,3,6,8],8)
0 这只是一次而且不是很聪明的动作。我没有包含的功能说明:
conditionX检查X是否胜出
conditionO检查O是否胜出
conditionDraw检查是否绘制
条件只检查上面发生的任何事情
状态永远是一个包含X coors,O coors and turns
的元组