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
с ходом вы проверяете. Это означает, что он снова находит тот же ход, что приводит к бесконечной рекурсии. При подсчете результата вам необходимо заполнить ход на доске перед повторением.
Псевдокод просто реализует стратегию мин / макс, фактически не вычисляя ничего общего с крестиками-ноликами. Ваш код просто рекурсивно называет себя бесконечно.