タワーディフェンスゲームで複数のランダムパスを使用したパスファインディング


8

タワーディフェンスゲームのランダムパスファインディングについて考えました。A *は、ランダムなパスファインディングが特に必要ため、私の目的では機能しません。

ルート、出発地、目的地の地図を想像してみてください。私は複数のルートを持っています。それらはすべて、出発地から目的地まで、何らかの方法でつながっています。次のようになります。


正方形のような形の2つの分岐パス

色の説明:赤-開始点。黒-目的地; 灰色-ルート; 白-空きスペース
(数字は一部のタイルへの参照として本文で使用されています)


エンティティがタイルを通過するときに、次のウェイポイントをランダムに計算することを最初に考えました。しかし、それはうまくいきません。エンティティがタイル1を通過すると、上または下に移動できます。それが2になると、それは(それの位置に対して)ダウン/アップまたは右に行くことができます。
場合、それは行くアップ/ダウン、それが逆方向に行くことを意味タイル1、に行くだろう。悪い...

本当にダイナミックにしたいのですが、今何ができるかわかりません。これについてアイデアや経験を持つ人はいますか?


私はメイクを認識してい大半タワーディフェンスゲームは、物事は、出口への最短パスをクロールし、ここから出るの無効な任意の移動...ハードの部分をブロックするプレイヤーは、タワーのレイアウトを変更したときにパスを再計算することを確認することであろう
ジェームズ

@ジェームズ:最短経路(A *)を取得することを意味しますか、それとも、ウェイポイントをクロールしてすべてのタイルの有効な方向を取得することを意味しますか。私の方法は修正されており、プレイヤーは塔をそこに配置できないため、パスを再計算する必要もありません。しかし、一般的にはあなたが正しいです。
マルコ

回答:


4

隣接するすべての正方形を次のウェイポイントとして使用する代わりに、最初に戻らない正方形のみを含め、それらからランダムに選択します。これを行った場合、戻ることはオプションではないため、戻ることは不可能です。

これは、各ウェイポイントを頂点とし、各パスをエッジとする有向グラフの問題です。サイクル数を制限するだけで、おそらく完全に削除できます。


それが私の第二の考えでした。「今に戻る道」というものの実装について考えなければなりません。渡すタイルの数を制限することは、動的で柔軟ではありません。
Marco

これを解決するには、有向グラフを作成し、訪問済み/未訪問のタイルを追跡します。次に、アクセスしていないタイルのみを検索することを確認します。これで、パスを表すグラフが作成されます。ここで、(以前に作成されたグラフで)ノートに複数の出力エッジがあるタイルにヒットした場合、ランダムに1つを選択します。
bummzack

以前のコメントでは「ノート」ではなく「ノード」と書くつもりでした。ごめんなさい。
bummzack

@bummzack:いいえ、それはうまくいきません。3つのパスを持つマップを想像してください。未訪問のノードを検索する場合は、最初に移動することもできます。地図をクロールしてランダムに方向を選択するアルゴリズムの実装について考えます。それが最初に戻ることに気づくとき、この部分は使用できません。これはカウンターでできます。スタートまでの距離が短くなると戻ります。これは、開発プロセスでのマップ作成時に一度解析されるため、パフォーマンスの問題はありません。
Marco

@マルコなぜそれはうまくいかないのですか?開始ノードから幅優先検索を実装すると、以前のノードに再度アクセスすることはありません。洪水のように見えるので、最初に戻ることはありません。
bummzack

7

あなたはランダムと言いますが、どれくらいのランダム性が欲しいですか?敵が最短経路の10倍の経路を選択しても問題ありませんか?敵が行き止まりに入ってバックトラックしなければならないのは大丈夫ですか?つまり、どのパスのセット、およびどの確率分布でランダムですか?

敵に短いパスを優先させたい場合、A *を使用できますが、それに供給されるエッジの重みをランダムに変化させます。次に、敵は常に各ノードを最大で1回訪問するランダムなパスを選択し、短いパスにバイアスをかけます。特に、ランダム化を行わない場合、同じ長さのパスがいくつか存在する場合、これらの各パスは等しい確率で選択されます。

または、A *では、ランダムな順序でネイバーを反復できます。あなたの例では、経路検出がノード1に到達すると、ランダムに最初に最下部の最上位をキューに入れ、最上位または最下位のパスが最初に考慮されるようにします。このソリューションでは、敵がすべての最短経路の中からランダムに選択するようになります。あなたの簡単な例では、両方の最短経路が同様に可能性がありますが、次のような状況では:

start -+--------+
       |        |
       +--------+
       |        |
       +--------+- end

上のパスは確率1/2で選択され、下のパスは確率1/4でそれぞれ選択されます。


OPが「ランダムパスファインディング」によって正確に何を意味するのかはわかりませんが、すべての最短パスの中からランダムに選択するためのソリューションは、彼が意図したものであり、「代替的に」はその問題の優れたソリューションです。
ジョッキング

0

単なる概念実証:

  1. ランダムな方向を選択してください。
  2. これにより、すでに行ったことがある場所に移動する場合は、別の方向を選択します。
  3. 方向が足りなくなった場合は、未探索の方向のある最後の広場に戻ります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.