C中的Tic Tac Toe AI问题

时间:2013-08-14 07:53:32

标签: c random multidimensional-array tic-tac-toe

我尝试制作一个简单的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;
     }               
}  

2 个答案:

答案 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';
}