1

我尝试制作一个简单的井字游戏项目,并试图让 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;
     }               
}  
4

2 回答 2

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';
}
于 2013-08-14T09:41:13.513 回答
1

您不需要循环来设置板上的移动。

board[randomNum][randomNum1] = 'X';

足以设置。

你可能会调用这个函数两次,因为函数只下一个动作。

于 2013-08-14T08:01:13.443 回答