В настоящее время я пишу AI для игры, написанной на С++. ИИ концептуально довольно прост, он просто проходит через дерево решений и выбирает соответствующие действия. Я ранее использовал пролог для механизма принятия решений, но из-за других разработчиков, использующих С++, и некоторые проблемы с интеграцией кода пролога, который я сейчас пытаюсь перенести на С++.
В настоящее время у меня есть куча фактов и правил в прологе (100+). Многие выражают вещи в форме, если game_state затем выполняет действие xyz. Большинство правил довольно просты, некоторые из них довольно сложны. Я посмотрел на подход с конечным автоматом, но, похоже, это не так масштабно для больших ситуаций. Моя первая попытка кодирования этого в С++ была огромным кошмаром if if else case case. У меня появился такой код:
if( this->current_game_state->some_condition == true ){
if( this->current_game_state->some_other_condition == false ){
//some code
}else{
return do_default_action();
}
}else if( this->current_game->another_condition ){
//more code
}
Сложность стала быстро неуправляемой.
Если есть хороший способ закодировать эту проблему в С++? Есть ли хорошие шаблоны проектирования для решения этой ситуации? Нет требования, чтобы логика содержалась в источнике, она просто должна быть доступна из С++. Единственным реальным требованием является то, что он достаточно быстр.
Я также рассмотрел механизмы правил, и если бы они были достаточно быстрыми, они могли бы быть подходящими. Знаете ли вы, есть ли механизм с открытым исходным кодом С++, который был бы уместен?