私はランダムに生成されたダンジョンでゲームをデザインしています。これを、ノードが部屋であり、エッジがドアまたは廊下である、接続された無向グラフとして表示したいと思います。次に、ダンジョンの入口として「サイド」ノードを選択し、この入口と他のすべてのノードとの間の距離を計算し、最も遠いノードの1つをダンジョンの「ゴール」(宝物、ボス、プリンセスなど)。
最終的なダンジョンの地形を生成する2つの方法を見ました。
- 最初にランダムグラフを生成し、エッジの接続を尊重して、ランダムな場所にある部屋で2Dワールドを塗りつぶします。部屋の生成が不可能な場所に部屋を適合させようと「ロック」される可能性があるため、これは時々困難になると考えました。
- 最初の部屋を生成し、それらが収まる場所にランダムに配置してから、結果をノードとエッジにマッピングします。私はこれを試すことにしました。
私の考えは次のとおりです。
- 最初に、ダンジョン全体を含む大きな部屋を生成します。
- 大きな部屋の内側のランダムな場所に壁を置き、大きな部屋を異なる面積の2つの小さな部屋に分割します。
- 次に、部屋が小さすぎるか、部屋の総数が最大(またはその他の条件)に達するまで、各部屋を2つに分割し続けます。新しい部屋はそれぞれノードです。
- 終了したら、各部屋をチェックして、隣接する他のすべての部屋を見つけ、2つのノードをエッジで接続されているものとしてマークします。
そうすることで、すべての部屋が2Dの世界で可能な場所に配置され、接続されたグラフによって正しくマッピングされるようにします。
私の問題は、部屋をつなぐドアと廊下が多すぎることです。
したがって、接続された無向グラフのエッジの数を減らし、最終的には接続されたまま(すべてのノードが到達可能なまま)のアルゴリズムが必要です。