C++ 返回空板的Tic-Tac-Toe-Minimax算法

C++ 返回空板的Tic-Tac-Toe-Minimax算法,c++,tic-tac-toe,minimax,alpha-beta-pruning,C++,Tic Tac Toe,Minimax,Alpha Beta Pruning,几天来,我一直在为Tic-tac-toe AI实现一个miniMax算法。现在,我遇到的问题是,当我调用minimax()函数时,在“returnBoard”输入中得到一个空板。我知道我的算法是通过一系列的电路板来实现的,因为我已经打印出了我得到的孩子们,我看到计算机正在移动并给电路板打分。有什么建议吗 void board::getBestMove() { board returnBoard; miniMax(INT_MIN + 1, INT_MAX -1, returnBoard); *th

几天来,我一直在为Tic-tac-toe AI实现一个miniMax算法。现在,我遇到的问题是,当我调用minimax()函数时,在“returnBoard”输入中得到一个空板。我知道我的算法是通过一系列的电路板来实现的,因为我已经打印出了我得到的孩子们,我看到计算机正在移动并给电路板打分。有什么建议吗

void board::getBestMove()
{
board returnBoard;
miniMax(INT_MIN + 1, INT_MAX -1, returnBoard);
*this = returnBoard;
}

int board::miniMax(int alpha, int beta, board & childWithMaximum)
{   
if (checkDone())
    return boardScore();

vector<board> children = getChildren();
for (int i = 0; i < children.size(); ++i)
{
    board curr = children[i];
    //children.pop_back();

    board dummyBoard;
    int score = curr.miniMax(alpha, beta, dummyBoard);

    if (computerTurn)
    {
        if (beta > score)
        {
            beta = score;
            childWithMaximum = curr;    
            if (alpha >= beta) break;
        }
    }

    else 
    {
        if (alpha < score)
        {
            alpha = score;
            childWithMaximum = curr;
            if (alpha >= beta) break;
        }
    }

}
return computerTurn? alpha : beta;
}

vector<board> board::getChildren()
{
vector<board> children;

for (int i = 0; i < 3; ++i)
{   for (int j = 0; j < 3; ++j)
    {
        if (getPosition(i, j) == '*') //move not made here
        {
            board moveMade(*this);
            moveMade.setPosition(i, j);             
            children.push_back(moveMade);
        }
    }
}

return children;
}
void board::getBestMove()
{
董事会和董事会;
极小极大值(最小值+1,最大值-1,返回板);
*这=返回板;
}
内测板::最小最大值(内测alpha、内测beta、板和儿童最大值)
{   
if(checkDone())
返回boardScore();
vector children=getChildren();
for(int i=0;i分数)
{
β=分数;
childWithMaximum=curr;
如果(α>=β)断裂;
}
}
其他的
{
如果(α<分数)
{
α=分数;
childWithMaximum=curr;
如果(α>=β)断裂;
}
}
}
返回计算机转角?α:β;
}
向量板::getChildren()
{
媒介儿童;
对于(int i=0;i<3;++i)
{for(int j=0;j<3;++j)
{
if(getPosition(i,j)='*')//此处不移动
{
董事会决议(*本);
移动。设置位置(i,j);
儿童。推回(移动);
}
}
}
返回儿童;
}
是整个可运行的内容

*this = returnedBoard;

这可能是你的问题。您不应该将此分配给
*此

这看起来很像您的一个,但我仍有一些问题。代码已经改变了,但我仍然不能完全正确。