私は現在、c++ で書かれたゲームの AI を書いています。AI は概念的にはかなり単純で、意思決定ツリーを実行して適切なアクションを選択するだけです。以前は意思決定エンジンにプロローグを使用していましたが、他の開発者が c++ を使用しており、プロローグ コードの統合に関するいくつかの問題があるため、現在は c++ に移植しようとしています。
現在、プロローグ (100 以上) には多くの事実とルールがあります。if game_state then do action xyz という形で多くのことを表現します。ほとんどのルールは非常に単純ですが、いくつかはかなり複雑です。私は有限状態マシンのアプローチを検討しましたが、それはより大きな状況にうまく対応できていないようでした。これを C++ でコーディングする最初の試みは、if then else 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
}
複雑さはすぐに手に負えなくなりました。
この種の問題を C++ でコーディングする良い方法があれば教えてください。この種の状況に対処するための適切な設計パターンはありますか? ロジックがソース内に含まれている必要はありません。C++ からアクセスできる必要があるだけです。唯一の実際の要件は、適度に高速であることです。
また、ルール エンジンも調べましたが、十分に高速であれば適切である可能性があります。適切なオープン ソースの C++ ルール エンジンがあるかどうか知っていますか?