【发布时间】:2013-08-24 08:18:25
【问题描述】:
我正在制作井字游戏的 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);
}
正如我所说,我想知道为什么会出现这种奇怪的行为以及如何解决它。
任何帮助将不胜感激:)
【问题讨论】:
-
当你学习编程时,你会遇到很多很多次这种情况,即你有一个错误,你需要调试它。现在是学习如何调试的好时机,既可以使用简单的方法(例如插入策略性 printfs),也可以学习如何使用 gdb 之类的调试器或 IDE 提供的任何调试器。让其他人为你调试代码只是推迟不可避免的事情——你迟早要掌握调试技能,所以最好现在就开始。
-
假设发现了一个空格并且分数永远不会超过
currrentBestScore,你认为num的值是什么时候你做最后的分配positions[num] = comp? -
这似乎是关于您正在编写的同一程序的第三个问题。 SO 不是用于代码审查的网站,而是用于解决具体技术问题的网站。
-
@PaulR 我已经调试了代码,它确实打印了符号,但只在下一个可用空间中。
-
@MichaelFerashireSilva 你了解 minimax 还是只是如何将它应用于你不了解的井字游戏?
标签: c recursion tic-tac-toe minimax