1

シンプルな三目並べプロジェクトを作成しようとしましたが、AI をランダムな場所に移動させようとしているので、AI は利用可能な場所に移動します。ただし、常に 2 回の移動を行います。1 回だけではなく、常に 2 回の移動を行う理由が不思議です。

つまり、ユーザーがスロット 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;
     }               
}  
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 に答える