-2

Tic-Tac-Toe の 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);                    
}

無敵のAIではなく、効果がないため、コードに何か問題があります。なんで?どうすれば修正できますか?

ありがとうございました :)

4

2 に答える 2

2

getFutureScoreOfMoveboardは自分自身を呼び出しますが、チェックしている移動で変更されることはありません。これは、同じ手が再び見つかることを意味し、無限再帰が発生します。結果を計算するときは、再帰する前にボードに移動を記入する必要があります。

于 2013-08-23T12:40:42.357 に答える
1

疑似コードは、実際に三目並べに関係することを何も計算せずに、最小/最大戦略を実装するだけです。コードは再帰的に自分自身を無限に呼び出します。

于 2013-08-23T12:46:53.573 に答える