我在C中写过Tic-tac-toe,我在游戏板上放置一个标志的功能有问题。这是代码:
int aiPutSign(int difficultyLevel, char board[])
{
if(difficultyLevel == 1)
{
srand(time(NULL));
int field = rand() % 9;
return board[field] == ' ' ? field : aiPutSign(difficultyLevel, board);
} else if(difficultyLevel == 2)
{
//to do
return 2;
} else if(difficultyLevel == 3)
{
//to do
return 3;
}
}
不幸的是,我得到了分段错误错误。所有我知道递归有一个问题,它会导致错误,但我不知道这是怎么回事以及如何修复它。
简而言之:board是9个字符的数组,拥有9个空格,每次玩家移动后我都会在其中放置X和O标志。如果玩家(这里是计算机AI)试图在已经填充的字段上放置符号,则递归递归并且rand()生成另一个字段数。
答案 0 :(得分:6)
不要将srand(time(NULL));
放入aiPutSign
功能,每次通话都会获得相同的随机数。例如,在程序开始时调用srand
一次。