web-dev-qa-db-ja.com

ランダム2Dタイルマップ生成アルゴリズム

誰もがMinecraftのような島構造や丘構造を生成する方法を教えてもらえますか?

ランダムな形状を生成するための適切な理論を探しているだけですが、定義された基本パターンを維持する必要があります。

のような:島は丸みを帯びるべきですが、形状とスケールが異なります(最小/最大幅と高さ)。

または:川は直線ではなく、曲線とランダムな幅が必要です。

または、ある種の森を生成します。ユーザーがまだ森を歩くことができるように木が配置されています(コードは入れようとする場合、木の周りのいくつかのブロックは空白のままにする必要があると思います)最後のものの周りのより多くの木)

そのようなことをするためにどのような数学を使用できますか?

チュートリアルや参考文献へのリンクがあれば嬉しいです。私は何時間もウェブを検索しましたが、見つけることができたのは「ゲーム数学」などのような購入する本だけでしたが、予算はゼロに設定されています。

編集:

まず第一に、私は私の悪い英語でごめんなさい。

二次的にあなたのすべての答えに感謝したいと思います。これらは素晴らしい参考資料であり、私はそれをより深く知るために多くの時間を費やします。

22
Ace

Amit’s Game Programming Information および彼による他のブログ投稿をご覧になることを強くお勧めします。彼は、川や海岸線などを含むリアルな外観のマップを作成するためのシリーズを全部持っていました。

世界の構築

手続き型マップの生成は、グリッド以外の世界にも適用できますが、グリッドで最もよく使用されます。一度に見ると、生成されたゲームマップは、手作りの世界ほどナイスではありません。ただし、次の3つの利点があります。(1)作成する世界が多い場合の世界あたりのコストの削減、(2)次回の世界が異なるためリプレイの価値の向上、(3)世界の発展の可能性ゲームが進行します。

  • アミットの世界地図ジェネレーター
  • 手続き型コンテンツの生成:地形、都市、建物の生成
  • Unangbandのダンジョン世代
  • 特定の部屋が他の部屋のオブジェクトを必要とするように、ロックとキーの構造でゲームワールドを生成する
  • 河川建設のアルゴリズム
  • ランダムに生成された地形に川を追加する
  • ダンジョンを生成するためのオリジナルのRogueアルゴリズム
  • 11デモとコードを使用した迷路生成アルゴリズム
  • ノイズ関数を使用して、TerrariaやMinecraftのような洞窟を生成する
  • 不規則な形の部屋、単純なアルゴリズム
  • サイズ変更可能なインテリアルームリージョン
  • DungeonMakerでダンジョンを掘るためのTunnelerアルゴリズム
  • ランダムな地形生成技術のガイド
  • 手続き型コンテンツ生成のWikiガイド
  • 大規模な仮想世界のシミュレーション

Amitの ゲーム用の多角形マップ生成(リストの最初の項目)は、賢明な生成のロジックについて語る非常に印象的な記事です形をした海岸線、島、川、山など。

ランダムに生成された世界で川を「成長させる」ための方法 [上記のリストに含まれる]川を生成するためのかなり単純なアルゴリズムマップ内の他の「タイル」に基づくパス、たとえばタイプと標高。

32
Ray Hayes

かつてローグライクを作成したときに、理論の素晴らしいサイトを見つけました。 見てください

3
Mizipzor

多くの場合、マップは「基本地形の高さ」、「水位」、「高地」、「木」、「住宅」などのレイヤー/オーバーレイに論理的に分割されています。

次に、レイヤーごとに異なる種類のジェネレーターが実行されます。フラクタルが非常に頻繁に使用されるのは、面白くて予測しにくい形状を生成する傾向があるためです。ただし、フラクタルの一部のみが使用されます。全体を使用すると、構造が即座に公開され(トップレベルのフラクタルは非常に反復的です)、視聴者はそれに気付くでしょう。そのため、生成されたフラクタルは歪んだ/修正された/フィルタリングされた/カットされ、それは明らかではありません。たとえば、いくつかの単純なXY三角オシレーターを使用して基本地形レベルを生成し、それをフラクタル画像の一部と合計して、いくつかの最小値と最大値に制限すると、顕著な丘とドロップのある不均一な地形が得られます..

他のすべてのレイヤーでは、地形以外のレイヤーは「高さ」や「密度」ではなく、0/1であるため、通常は「合計」できません-ここにツリーを配置するかしないか。繰り返しますが、同じように実行します:いくつかの画像(おそらくフラクタルかもしれません)を生成し、数値を調べてしきい値を設定します:数値がXよりも高い/低い場合はどこでも、物を配置/配置しません。あなたはさらにそれをフィルタリングまたはブランチすることができます:例えば、木が水中の位置に当たる場合、魚をそこに置くか、木をまったく置かない。

私はあなたがその上でリソースを見つけることができなかったと思います。数年前、「地形生成アルゴリズム」のグーグル検索では多くのヒットが返されました。

3
quetzalcoatl