ポケモンのアイススライディングパズルに似たパズルゲームを作成するために、有向グラフをランダムに生成しようとしています。
これは基本的に、http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theoryをランダムに生成できるようにしたいものです。
xおよびy次元でグラフのサイズを制限できる必要があります。リンクに示されている例では、8x4グリッドに制限されます。
私が直面している問題は、グラフをランダムに生成するのではなく、ノードの反対側に何か(岩のようなもの)が必要なので、2D空間に適切にマップできるグラフをランダムに生成することですスライドを止めると視覚的に意味があります。これに伴う問題は、岩が他の2つのノード間のパスまたは場合によっては別のノード自体のパスになり、グラフ全体が破損することがあることです。
私が知っている少数の人々と問題について議論した後、解決策につながる可能性のあるいくつかの結論に達しました。
- グリッドを構築するときに、グリッドの障害物をグラフの一部として含める。
- 完全に満たされたグリッドから始めて、ランダムなパスを描画し、そのパスを機能させるブロックを削除します。
問題は、追加の短いパスの導入を避けるために、どれを削除するかを判断することとなります。また、動的プログラミングアルゴリズムは有益であると考えていましたが、動的プログラミングアルゴリズムをゼロから作成するのに熟練している人はいませんでした。この問題が公式に呼ばれているものについてのアイデアや参考文献(公式のグラフの問題である場合)が最も役立ちます。
ブロックをランダムに配置し、選択した開始/終了からナビゲーショングラフを生成することで、これまでに達成したことの例をいくつか示します。アイデア(前のリンクで説明)は、緑のSから始めて緑のFに到達することです。これを行うには、上/下/左/右に移動し、選択する方向に移動し続けます。壁。これらの写真では、灰色が壁、白が床、紫色の線が開始から終了までの最小の長さであり、黒い線と灰色の点が可能な経路を表しています。
ランダムに生成されたグラフの悪い例は次のとおりです。
ランダムに生成された(または手で調整された)グラフの良い例を次に示します。
また、パズルとして実際にこれをプレイするときに、より難しいものが最小パスに沿って多くの高度なノードを持つものであることに気づいたようです。