簡體   English   中英

C井字游戲AI問題

[英]Tic Tac Toe AI issue in C

我嘗試制作一個簡單的井字游戲項目,並且試圖使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;
     }               
}  

您無需循環即可在板上設置運動。

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

足以設置。

您可能會兩次調用此函數,因為該函數只執行一個動作。

我懷疑您的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';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM