-2

我决定制作一个井字游戏的 C 程序。我现在正试图让 AI 无敌,但我遇到了一个问题。

我写了这个:

int getFutureScoreOfMove(char square[][columns], char turn)
{
      int row, column, curBestScore, score;

      if(turn == 'C')                         curBestScore = -100;       
      else                                     curBestScore = 100;        

      for(i = 0; i < 3; i ++)
      {
           for(j = 0; j < 3; j++)
           {
                if(square[i][j] == ' ')
                {
                        if(turn == 'C')      
                        {
                                 square[i][j] = 'X';
                                 score = getFutureScoreOfMove(board, 'U');     
                                 square[i][j] = ' ';
                        }
                        else                  
                        {
                                 square[i][j] = 'O';
                                 score = getFutureScoreOfMove(board, 'C');
                                 square[i][j] = ' ';
                        }
                        if(turn == 'C' && score > curBestScore)           curBestScore = score;
                        if(turn == 'U' && score < curBestScore)           curBestScore = score;
                }       
           } 
      }  
      return(curBestScore);                    
}

代码有问题,因为它不是无敌的人工智能,而且是无效的。为什么?我该如何解决?

谢谢 :)

4

2 回答 2

2

getFutureScoreOfMove调用自己,但它永远不会board随着您检查的移动而修改。这意味着它再次找到相同的移动,导致无限递归。在计算结果时,需要在递归之前在棋盘上填写移动。

于 2013-08-23T12:40:42.357 回答
1

伪代码只是实现了一个最小/最大策略,而没有实际计算任何与井字游戏有关的东西。您的代码只是无限递归地调用自己。

于 2013-08-23T12:46:53.573 回答