web-dev-qa-db-ja.com

パックマンの経路探索アルゴリズム

ゲームパックマンを実装したかった。 AIについては、多くのフォーラムで見たA *アルゴリズムの使用を考えていました。ただし、いくつかの単純なパスファインディング(特定の障害物を挟んでポイントaからポイントbに移動する)の幅優先探索を実装したところ、常に最適なパスが得られることがわかりました。単純な経路探索を使用するパックマンのようなゲームでは、グラフにコストの概念がないためかもしれません。では、パックマンでのパスファインディングにA *の代わりにBFSを使用しても大丈夫ですか?

16
Karan

経路探索については、次の点に注意してください

  • BFSは、A *よりもはるかに多くのノードを参照するため、処理速度が大幅に低下します。
  • A *はBFSと同じ答えを思い付くでしょう
  • A *の実装は本当に簡単です

ゴーストAIについて話している場合は、チャドが言及したページを確認してください。 パックマンドシエ -ゴーストは、ターゲットタイルに到達する方法を決定するときに、実際にはユークリッド距離を使用します。場合によっては、パックマンを見つけるのが非常に苦手になります。

16
Daniel G

これは状況によって異なりますが、実際にゴーストをパックマンのように機能させたいですか?

ゴーストの追跡AIがどのように機能するかについての説明があります (それぞれが異なる方法で機能します)。彼らが実際にどのように彼らの ターゲットタイル に到達しようとするかについても、上記の章を必ず読んでください。そのページは、パックマンの素晴らしく詳細な分析であり、興味深い読み物です。

23
Chad Birch

場合によります。 BFSは完全かつ最適です(最適なソリューションを見つけるという意味で)

欠点は?それを見つけるのに長い、長い、長い時間がかかるかもしれません!また、問題の影響要因によっては、メモリがすぐに不足する場合があります。

パフォーマンスの問題がない場合は、BFSを維持しますが、巨大な迷路で試してみたい場合は、解決策が得られるまでに時間がかかることがあります。

最高の検索戦略であるA *を試してみることをお勧めします。 BFSに問題がない場合でも、A *は実装に適したアルゴリズムであり、多くのすばらしいことを学ぶことができます。

4
mcabral

パックマンの元の設計者が使用した反オブジェクトアプローチを検討することをお勧めします。それについて読むことができます ここ および ここ

ただし、質問に答えるには、機能するものを使用してください。 BFSから良い結果が得られている場合は、それを使用してください。パスファインディングを十分に抽象化して、後でより良いものが見つかった場合に置き換えることができるようにすることを忘れないでください。

幸運を!

3
Audie

エッジの重みが使用されていない場合、BFSは常に最短パスを提供します。エッジウェイトが必要ない場合は、それを使用します。後でいつでも切り替えることができます。

1
rlbond

関連する質問、おそらくあなたの質問に答えます: a Java 2d Game? での経路探索

0
strager