我尝试制作一个简单的tic tac toe项目,我试图让AI移动到随机位置,以便AI移动到任何可用的位置。但是,它总是有2个动作。我想知道为什么它总是让2个动作而不仅仅是1.
我的意思是,假设用户在插槽1,1中输入“O”。
0 1 2
+----+----+----+
0 | | | |
| | | |
+----+----+----+
| | | |
1 | | O | |
+----+----+----+
| | | |
2 | | | |
+---------------
然后计算机移动2个移动:进入插槽1,2和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;
}
}
答案 0 :(得分:1)
您不需要循环来设置电路板上的移动。
board[randomNum][randomNum1] = 'X';
足以设置。
你可能会调用此函数两次,因为函数只能进行一次移动。
答案 1 :(得分:1)
我怀疑你的checkWin
功能是罪魁祸首。可能有一个=
某个地方你想拥有==
。但这只是猜测而没有看到它。
您的compMove
功能严重过于复杂,但并没有错。这是执行相同操作的代码:
void compMove(char board[][columns]) {
int row, col;
/* DON'T seed RNG here; do it once in main() */
do {
row = rand() % 3;
col = rand() % 3;
} while (board[row][col] != ' ');
board[row][col] = 'X';
}