テレポーターで接続された手続き的に生成された場所でゲームの世界を構成したいという新しいプロジェクトを始めたところです。少し調べてみたところ、誰が議論しているかによって、「グラフ理論」または「流血複雑」と呼ばれることがわかりました。残念ながら、グラフの生成に関する情報はほとんど見つかりませんでした。私が見たほとんどのツールは、既存のグラフを調べることに向けられています。
用語が正しく整理されていると仮定すると、私の要件はグラフが次のとおりであることです。
- シンプル—位置(頂点)にはそれ自体に接続するテレポーター(エッジ)がなく、2つの頂点にそれらを接続する複数のエッジがあるべきではありません。
- connected —グラフ内の任意の2つの頂点の間を移動できるはずです(ただし、パスを見つける必要があるとは思いもしません。プレイヤーがパスを選択すれば、パスを見つけることができると知っていれば十分です)。
- 循環—任意の2つの頂点間に複数のパスが必要です
- 無向—すべてのエッジはどちらの方向にも移動できます
- 無限—プレイヤーが望めば、無限に移動できるはずです。探索されて
いない最も外側の頂点に近づくにつれて、グラフは徐々に生成され続けます。 - ローカルで有限—頂点の次数は、プレーヤーが訪問した後は決して変更されません。
- 安定したラベル—各頂点は、それ自体がシードから手続き的に生成される場所を表します。プレイヤーがそこを移動するために使用したパスや、グラフがどれだけ大きいかには関係なく、同じシードを頂点に割り当てる必要があります。
頂点として2Dパーリンノイズの極大値を使用する(入力xとyをラベルとして使用できるようにする)ことについていくつかのアイデア(まだ実装しようとしていません)がありましたが、それは不格好で複雑すぎます。
このようなグラフを生成するより良い方法はありますか?私はPanda3Dとnumpyを使用してPython 2.6で開発しています。もちろん、この問題を解決するために他のライブラリを含めてもかまいません。
編集する
私は自分の要件のいくつかを説明するのが苦手だったと思うので、それはイラストの時間です!うまくいけば、これは物事を片付けるでしょう。
ラベルが安定しているということは、たとえば、プレーヤーAがたくさんの探索を行って、特に開始位置に戻る循環パスや猫のような山を見つけられるようにしたいということです。彼のゲームは次のようになります(頂点にはシードとエッジがあり、プレイヤーがトラバースした順序で番号が付けられています)。彼は頂点8329(緑)から始め、ハッピーキャットマウンテンは頂点6745(青)にあります。
プレイヤーAの仲良しプレイヤーBは猫のファンなので、彼女に見せたいと思っています。彼は彼女に彼の世界のルートシードと興味のある山へのより短いルートに沿った方向を与えます。彼女のゲームは次のようになります。
私が現在最も苦労している問題は、「彼女の探索が同じ経路をたどっていないときに、プレーヤーBに同じシードを生成するにはどうすればよいですか?」です。 これが、Perlinノイズを使用するアイデアに私を導いたものです。同じルートシードが使用されている限り、最大値は移動しないため、それらの座標は安定した頂点シードとして使用できます。