我正在用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;
}
}
不幸的是,我得到分割错误。我只知道递归有一个问题,它会导致一个错误,但我不知道这是怎么发生的,以及如何修复它。
简而言之:棋盘是一个9个字符的数组,可以容纳9个空格,我在每个玩家每次移动后都会在其中放置X和O符号。如果player(这里是计算机AI)试图在已经填充的字段上放置sign,递归就会出现,rand()会生成另一个字段数。
最佳答案
不要把srand(time(NULL));
放在aiPutSign
函数中,每次调用都会得到相同的随机数。例如,在程序开始时调用srand
一次。