エレベーター付きの家の地図の迷路が解決できることを確認しますか?


13

私のゲームでは、家の床を横から見ることができ、ヒーローはリフトを取ることができます-リフトは、矢印に応じて、上昇(次のリフトまで)、または下降(次のリフトまで)します示されており、接続されているちょうど2つのリフトのペアが常にあります。主人公が垂直方向に移動できる唯一の方法ですが、水平方向に自由に移動できます。家の地図はランダムな11x5グリッドで、さまざまなアイテムと、左端、右端、時には2つの中央の位置のいずれかに通過できない壁があります。

リフトの例

私の質問:マップが常にランダム化され、常に解決可能であり、ヒーローが最下階の左側から開始して、最上階にある上向きのリフトを介して常にマップから離れることができるようにするにはどうすればよいですか?

価値があるのは、開発にLua言語を使用することです。本当にありがとう!

回答:


14

あなたがしたいことは、すべてのノードがエレベーターの位置であり、それらの間のエッジがあなたがそこを歩いたり持ち上げたりできることを意味するグラフを作成することです。グラフを作成したら、dfs / bfsを使用して、開始ノードから終了ノードに到達できるかどうかを確認できます。

上記の例を使用して、グラフがどのように見えるかの写真を作成しました。緑の円はそこにエレベーターがあり、緑の線はノード間を移動できることを意味します。

ノード


おかげで、それは非常に便利です!私の質問では、最初にマップも生成する必要があることをもっと強調すべきでした。私が今熟考しているのは、完全にランダム化されたリフト/壁の組み合わせを何度も生成し、それらの解決可能性をチェックするのではなく、主人公のように家の中をアルゴリズムが歩き回るのが簡単ではない場合ですランダムなリフトとドアを生成します(ランダムなリフト距離と左右のターンを取り、たとえば壁を追加します)。「0、4、または8ターン右に歩いてください。上向きのリフトを作成し、1階から4階に上がります...」
フィリップレンズセン

@PhilippLenssenこれは本質的に、グラフ上の迷路生成に対する「ランダム化された深さ優先検索」アプローチです。
ケビンリード

5

あなたが持っているものと通常の迷路の違いは、単純に隣接していない縦方向の接続があることです。あなたが見ているべきものは、グラフベースの迷路生成アルゴリズムだと思います。そのためには、通常の2D迷路よりも大きな「隣接する部屋」または「可能な壁」のセットが必要です。これは、エレベーターまだ介在していないフロアグリッドセルの垂直方向に並んだペアがすべて隣接しているためです。これを、明確なリフトエッジを追加すると、他のリフトエッジが偶発的に削除されるグラフとしてモデル化できます。一部のアルゴリズムはこれによって混乱する可能性がありますが、他のアルゴリズムは混乱しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.