Tic Tac Toe непобедимый код AI проблема

Я решил сделать программу Си Tic-Tac-Toe. Я сейчас пытаюсь сделать ИИ непобедимым, но столкнулся с проблемой.

И я написал это:

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);                    
}

В коде что-то не так, так как он НЕ является непобедимым ИИ и неэффективен. Зачем? И как я могу это исправить?

Спасибо:)

2 ответа

getFutureScoreOfMove называет себя, но это никогда не изменяет board с ходом вы проверяете. Это означает, что он снова находит тот же ход, что приводит к бесконечной рекурсии. При подсчете результата вам необходимо заполнить ход на доске перед повторением.

Псевдокод просто реализует стратегию мин / макс, фактически не вычисляя ничего общего с крестиками-ноликами. Ваш код просто рекурсивно называет себя бесконечно.

Другие вопросы по тегам