【发布时间】:2013-08-14 07:53:31
【问题描述】:
我尝试制作一个简单的井字游戏项目,并尝试让 AI 移动到随机位置,以便 AI 移动到任何可用的位置。但是,它总是移动 2 步。我想知道为什么它总是走 2 步而不是 1 步。
我的意思是,假设用户在插槽 1,1 中输入“O”。
0 1 2
+----+----+----+
0 | | | |
| | | |
+----+----+----+
| | | |
1 | | O | |
+----+----+----+
| | | |
2 | | | |
+---------------
然后计算机移动 2 步:进入插槽 1,2 AND 2,0
0 1 2
+----+----+----+
0 | | | |
| | | |
+----+----+----+
| | | |
1 | | O | X |
+----+----+----+
| | | |
2 | X | | |
+---------------
所以我想知道为什么会这样?
这是我的代码:
void compMove(char board[][columns])
{
int randomNum, randomNum1, i, j;
bool didMove = FALSE;
srand((int)time(NULL)); //Seed the random number generator
randomNum = rand() % 3;
randomNum1 = rand() % 3;
while(board[randomNum][randomNum1] != ' ')
{
randomNum = rand() % 3;
randomNum1 = rand() % 3;
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == randomNum && j == randomNum1)
{
board[i][j] = 'X';
didMove = TRUE;
break;
}
}
if(didMove == TRUE) break;
}
}
【问题讨论】:
-
首先,不要为随机数生成器播种多次。我建议你尽早在
main函数中做,不要再做。 -
显示调用
compMove的代码,看起来这个函数没有错误。可能的原因是您调用了两次compMove。 -
board[]如何被初始化(在传递给compMove()之前)? -
另外,您如何、何时何地调用您的
compMove函数?它可能会被调用两次? -
只是对一个好的风格的特定实例的快速评论:代替 if(didMove == TRUE),您可以直接使用 if(didMove)我>。这通常被认为是好的风格。
标签: c random multidimensional-array tic-tac-toe