我对Tic-Tac-Toe的短极小极大算法有什么问题

时间:2016-05-02 22:25:21

标签: python tic-tac-toe minimax

    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

的元组

0 个答案:

没有答案