我决定制作一个Tic-Tac-Toe的C程序。我正试图让AI无敌,但我遇到了一个问题。
我写了这个:
int getFutureScoreOfMove(char square[][columns], char turn)
{
int row, column, curBestScore, score;
if(turn == 'C') curBestScore = -100;
else curBestScore = 100;
for(i = 0; i < 3; i ++)
{
for(j = 0; j < 3; j++)
{
if(square[i][j] == ' ')
{
if(turn == 'C')
{
square[i][j] = 'X';
score = getFutureScoreOfMove(board, 'U');
square[i][j] = ' ';
}
else
{
square[i][j] = 'O';
score = getFutureScoreOfMove(board, 'C');
square[i][j] = ' ';
}
if(turn == 'C' && score > curBestScore) curBestScore = score;
if(turn == 'U' && score < curBestScore) curBestScore = score;
}
}
}
return(curBestScore);
}
代码中存在错误,因为它不是无敌的AI,并且无效。为什么?我该如何解决?
谢谢:)
答案 0 :(得分:2)
getFutureScoreOfMove
会自行调用,但它永远不会根据您正在检查的移动修改board
。这意味着它再次找到相同的移动,从而导致无限递归。在计算结果时,您需要在递归之前填写板上的移动。
答案 1 :(得分:1)
伪代码只实现了一个最小/最大策略,而没有实际计算任何与tic-tac-toe有关。你的代码只是递归地无限地调用它自己。