3

Pacmanを実装しようとしています。これは正常に機能しますが、これまでのところ、ゴーストはパスファインディングを使用していません。代わりに、各パスジャンクションでどのパスを取るかをランダムに決定します。したがって、パックマンがゲームに勝つことはそれほど難しいことではないことを想像できます;)

だから私はパックマンのパスファインディングアルゴリズムについて少し読んだので、ここで私は本当に良い答えを見つけました:パックマンのパスファインディングアルゴリズム

答えはhttp://home.comcast.net/~jpittman2/pacman/pacmandossier.html#Chapter%204を参照しています

これはすべて問題ありませんが、パックマンの私の実装では、2人の異なるプレーヤーによってプレイされる2つのパクマンがあります。ですから、幽霊が常に1人のプレイヤーを追いかけるとは限らないように、パスファインディングアルゴリズムをどのように適応させるのか疑問に思います。

ゴーストが両方のプレイヤーにほぼ等しく公平になるようにアルゴリズムを変更する方法について何か考えはありますか?

4

5 に答える 5

5

最も簡単な戦略は、各ゴーストに最も近いプレイヤーを追いかけることだと思います。近接度は、マンハッタン距離(パスファインディングの質問にリンクがあります)またはユークリッド距離を使用して、またはプレーヤーまでのパスの長さによって計算できます。最後のオプションは、両方のプレーヤーへのパスを計算する必要があることを意味します。これらすべてのオプションを試して、好みに合わせて1つ選択してください。

また、サイドノートに。パスファインディングの質問に答えるすべての人は、BFSよりもさらに遅いダイクストラのアルゴリズム については言及していませんでした:)が、すべての最短パスを1回だけ検索できます。つまり、A *またはBFSを実装し、ゴーストがn個ある場合、少なくともn個のパスファインディングクエリを実行します。Dijkstraを使用すると、プレーヤーから始めて1回だけそれを行うことができます。しかし、それはすべて異なります。ゲームフィールドが大きすぎる場合、ダイクストラは最良の選択ではありません。試してみて、実験してみてください。多分それはあなたに合うでしょう。

于 2010-06-23T12:50:20.583 に答える
3

(見たことがありませんが)すべてのゴーストアルゴリズムは、ゴーストと「プレーヤー」の相対的な位置に基づいて動作していると思います-まあ、各ゴーストに、2人のプレーヤーのどちらを使用するかについて考えを変えさせるだけですアルゴリズムの「プレイヤー」は、頻繁に発生します。

正確に「非常に頻繁に*」が何を意味するのかを判断することは、プレイテストの質問になります-それは決まったスケジュールで行う必要がありますか?ゴーストごとに異なりますか?2人のプレーヤーの相対的な近さに基づいて変化しますか?ランダムに-ユニフォーム/ポアソン/他の配布?

あなたが見ることができるように多くの可能性があります。「良すぎる」行動と「愚かすぎる」行動の両方を避けたいことを覚えておいてください。

于 2010-06-23T12:10:49.660 に答える
2

1つのゴーストから1つのパックマンまでの距離と方向、および現在1つのパックマンを追跡しているゴーストの数(およびどのゴースト)を照会できる場合は、創造性を備えた非常に優れたシンプルなAIを作成できるはずです。

于 2010-06-23T12:22:45.393 に答える
1

このWebページで説明されているパスファインディングアルゴリズムを維持していると思いますあなたが言った。これにより、ゲームがオリジナルに忠実に感じられるようになります。唯一の問題は、特定のパックマンを追いかける幽霊の数を特定することです。この動作には、すべてのゴーストが1人のプレイヤーを追いかけているシナリオを含める必要があると思います。したがって、1、2、3、または4人のゴーストがプレーヤーを追いかけているかどうかを判断するためのアルゴリズムが必要です。アルゴリズムは、プレーヤー間のポイント差に基づくことができます。そのため、リードしているプレイヤーはより多くの幽霊に追われることになります。アルゴリズムは、おそらくプレイヤーに残されたライフの数を考慮に入れる必要があります。したがって、リードのプレイヤーのライフが少ない場合、アルゴリズムは、リードのプレイヤーを追いかけるゴーストの数を増やすのを遅らせる必要があります。プレイヤーを追いかける幽霊の数の変化の頻度もあまり頻繁に起こらないはずです。ゴーストが追いかけられているプレイヤーを変えすぎると、そうすれば、幽霊も実際には追いかけていないように見えます。前述のWebページと同様に、適切な動作を実現するには、ある程度の実験が必要です。いくつかの単純なルールを使用することで複雑な外観の動作を実現できる場合があるため、最初は単純に保つことが重要だと思います。幸運を祈ります。あなたが思いついたものを見てみたいです。終わったらリンクを投稿してください!

于 2010-06-23T13:38:27.273 に答える
1

これがあなたの「公平さ」の概念と一致するかどうかはわかりませんが、たまたま1人のプレイヤーが4人の幽霊すべてに近づき、彼らが彼に群がってフォローするというケースを防ぎたいと思います。彼は周りにいて、二度と他のプレイヤーを追いかけることはありません。これは、ゴーストが常に最も近いプレイヤーをフォローするというルールの結果である可能性があります。

最初に2人のゴーストをプレーヤー1に、他の2人のゴーストをプレーヤー2にかなり割り当ててから、ターゲットを追跡させる(そしてこれを頻繁に再割り当てする)ことを検討してください。でも、もし私が現実の世界で幽霊だったら、友達全員と私が1人のパックマンに群がっていてもかまいません。

BFSまたはダイクストラの代わりに、深さ優先探索を使用して深さ3または4に到達します。この探索木の葉で、ゴーストとパックマンの間のデカルト距離を使用し、根までの最良の葉の値を選択します。先読みが小さい場合は、BFSやダイクストラに比べてコーディングが速くて簡単です。深さ制限探索は、ゲームボードにスパイラルを逃れるために必要な移動数が3または4を超えるスパイラルコリドーがない場合、ゴーストに対してかなりインテリジェントな動作を提供するはずです。これは、アルゴリズムの実行時間がそうではないことも意味します。スパイラルコリドーがないと仮定すると、BFSやダイクストラと同様にボードが大きくなるにつれて増加します。

于 2010-06-23T20:51:25.557 に答える