流れる地形を「ランダムに」生成する正しい方法


9

シンプルなトップダウンRTSゲームを作成しています。必要に応じて、その場で「ランダムに」マップを生成することを計画しています。私はすべて「パス」で機能することを計画しています:

  1. 地形をすべての草で埋めます
  2. 戻って、砂利のランダムな噴出をいくつか追加します
  3. 砂利を丸める
  4. 2番目のレイヤーに山の風景を描く
  5. 山を丸める
  6. などなど

さて、以下のこの写真を見てください:

ここに画像の説明を入力してください

私は自分のマップエディターを使用してこれを手作業で作成しましたが、うまくいけばパス/ステップ3を実行した後の結果になることを計画しています。

砂利を少なくとも不規則な形にして散発的に自然に見えるように、砂利をいつ、どのように配置するかを決めるにはどうすればよいですか?

できればありがとう!どんな助けもありがたいです!

補足として:

各パスは、基本的には次のように、すべてのタイルを繰り返し処理します(マップは40x40のタイルに分割されています)。

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

回答:


5

高さマップを生成するために、 Perlin Noise(実装についてはStackOverflowの回答を参照)をいじってみてください。高さマップから、特定の高さの範囲を異なるタイルにマップできます。何かのようなもの:

  • 雪の上位20%
  • 次の20%砂利
  • 次の40%草
  • 最後の20%水

生成して見栄えのよい地形を取得するには、Perlinノイズジェネレーターの値を操作する必要があります。


5

他の人が言ったように、パーリンノイズは、さまざまなタイプのタイルを配置する場所を決定するための優れたデータソースになるはずです。そのアイデアを補完し、チェックリストの3番目のステップ- 角を丸めるのに役立つ2つの追加リソースをリンクしたいと思います

これは自動タイリングと呼ばれるプロセスですとであり、実装するのはそれほど難しいことではありません。これを行うにはさまざまな方法がありますが、それらのほとんどは、その場所に描画するグラフィックを決定するために、各タイルの隣接情報の計算に依存しています。

この問題を解決する非常にエレガントな方法は、隣接するタイルの方向ごとに一意のフラグ値を割り当て、タイルの隣接するすべてのフラグを合計して得られる値が正しい位置に対応するようにスプライトシートをレイアウトすることです。スプライトシートのタイル。テクニックの非常に明確な説明については、この記事をお読みください。

そして、テクニックの別のバリエーションを説明する別のリソースがあります。


ねえ、ちょうどあなたに知らせるために、あなたの答えは角を丸くすることに関しては非常に役に立ちました。トンに感謝します:)それは実際にはすべてうまくいきます(丸みを帯びたコーナーも含む)!
Freesnöw

4

基本的に、Perlinノイズ生成を使用してマップを生成できます。生成された高さマップをサンプリングし、特定の高さを超えるマップの部分に砂利ブロックを割り当てます。

このようなシステムと、生成できるさまざまなタイプの地形を実装する方法についての優れたリファレンスポストを次に示します。

例には必要以上に多くのステップがありますが、概念は同じです。

Minecraftタイプのワールドジェネの詳細

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

ここに画像の説明を入力してください

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