ゲームパックマンを実装したかった。AIについては、多くのフォーラムで見たA*アルゴリズムの使用を考えていました。ただし、いくつかの単純なパスファインディング(特定の障害物を挟んでポイントaからポイントbに移動)の幅優先探索を実装したところ、常に最適なパスが得られることがわかりました。単純なパスファインディングを使用するpacmanのようなゲームでは、グラフにコストの概念がないためかもしれません。それで、パックマンのパスファインディングにA *の代わりにBFSを使用しても大丈夫ですか?
6 に答える
これは状況によって異なりますが、実際にゴーストをパックマンのように機能させたいですか?
これは、幽霊の追跡AIがどのように機能するかについての説明です(それぞれが異なる方法で機能します)。彼らが実際にターゲットタイルに到達しようとする方法についても、上記の章を必ず読んでください。そのページは、パックマンの素晴らしく詳細な分析であり、興味深い読み物です。
パスファインディングについては、次の点に注意してください。
- BFSは、A *よりもはるかに多くのノードを参照するため、処理速度が大幅に低下します。
- A*はBFSと同じ答えを出します
- A*は本当に簡単に実装できます
- ヒューリスティックとしてマンハッタン距離を使用します-これは非常に簡単に実装でき、非常に効率的な検索につながります
- 詳細については、http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.htmlを参照してください(シリーズ全体が非常に興味深い)
ゴーストAIについて話している場合は、チャドが言及したページを確認してください:パックマンドシエ-ゴーストは、ターゲットタイルに到達する方法を決定するときに、実際にはユークリッド距離を使用するだけなので、パックを見つけるのは非常に困難です。場合によっては男。
場合によります。BFSは完全かつ最適です(最適なソリューションを見つけるという意味で)
欠点は?それを見つけるのに長い、長い、長い時間がかかるかもしれません!また、問題の影響要因によっては、メモリがすぐに不足する場合があります。
パフォーマンスの問題がない場合は、BFSを維持しますが、巨大な迷路で試してみたい場合は、解決策が得られるまでに時間がかかることがあります。
最高の検索戦略であるA*を試してみることをお勧めします。BFSに問題がない場合でも、A *は実装に適したアルゴリズムであり、多くの優れた方法を学ぶことができます。
エッジの重みが使用されていない場合、BFSは常に最短パスを提供します。エッジウェイトが必要ない場合は、それを使用します。後でいつでも切り替えることができます。
関連する質問、おそらくあなたの質問に答えます:Java 2dゲームでのパスファインディング?