我正在制作Tic-Tac-Toe的C程序。我正试图让AI无敌,但我遇到了一个问题。问题是AI只是在下一个可用问题中打印符号。为什么?我该如何解决?
这是我的呼叫功能:
void determinMove(char positions[])
{
int num, i, currentBestScore, score;
currentBestScore = -100;
for(i = 0; i < 9; i++)
{
if(positions[i] == ' ')
{
score = getFutureScoreOfMove(positions, 'C');
if(score > currentBestScore)
{
num = i;
currentBestScore = score;
}
positions[i] = ' ';
}
}
positions[num] = comp;
}
另一个递归函数:
int getFutureScoreOfMove(char positions[], char turn)
{
int i, currentBestScore, score;
if(turn == 'C') currentBestScore = -100;
else currentBestScore = 100;
for(i=0; i<9; i++)
{
if(positions[i] == ' ')
{
if(turn == 'C')
{
positions[i] = 'X';
score = getFutureScoreOfMove(positions, 'U');
positions[i] = ' ';
}
else
{
positions[i] = 'O';
score = getFutureScoreOfMove(positions, 'C');
positions[i] = ' ';
}
if(turn == 'C' && score > currentBestScore)
currentBestScore = score;
if(turn == 'U' && score < currentBestScore)
currentBestScore = score;
}
}
return(currentBestScore);
}
正如我所说,我想知道为什么会出现这种奇怪的行为以及如何解决它。
任何帮助都会非常感激:)
答案 0 :(得分:3)
你在哪里计算一名球员直线得到3分?你的代码中没有任何地方可以计算出来。您已经通过递归迭代了可能的董事会职位,但没有考虑获胜条件。也许是第一个代码。