回答:
あなたは近くのブロックをチェックし、そこにあるものに応じて確率を変えるアルゴリズムを使うことができます-しかし、私はそれが主に間違ったアプローチだと思います。
あなたが見たいのはフラクタルノイズタイプです-この場合、パーリンまたはシンプレックスノイズです。ノイズを生成する場合、-1から1までの値を取得します。
http://en.wikipedia.org/wiki/Perlin_noise
次に、水を作るもののしきい値を設定することにより、水位を調整できます。他のブロックでは、2番目のノイズセットを実行して、岩と草を切り替えることができます。(このようにすると、水の大きな塊ができますが、石の塊は小さくなります)。
getTerrain(x,y) {
if(perlin_noise(x,y) > 0) {
if(perlin_noise(x * scale,y * scale) > 0) {
return rock
} else {
return dirt
}
} else {
return water
}
スキャンとトスの方法は非常に複雑であり、過度に堅牢ではないので、私が楽しんだ別の方法を提案します。
マップ全体にグリッドを配置し、マップを大きな正方形に分割します。
各交差点で乱数を生成します(0と1の間がパーセンテージで機能します)
各四角形を4つの偶数の四角形に切り分けて細分割します-古い線に沿って、細分割線を見つけたら、隣接する2つの点の間に乱数を生成します。同様に、十字の中心について、最も高い点の間にある点を生成しますおよび最低値。
すすぎ、繰り返します。最初のパスから最初のランダム性が得られますが、後者のパスではある程度の均一性が得られます。疑似乱数では申し訳ありません。
0-------5 0---3---5 0-1-3-4-5 011233455
| | | | | | | | | | 012344555
| | | | | 0-2-4-6-5 002445665
| | | | | | | | | | 123445666
| | 2---5---7 2-4-5-7-7 234455777
| | | | | | | | | | 233455688
| | | | | 2-3-5-5-9 223455589
| | | | | | | | | | 233455589
2-------9 2---4---9 2-4-4-5-9 234445579
三角形の場合は、細分割してもクロスバーが失われないため、これはさらに効果的です。
もちろん、絶対的に最良の結果はこれらの方法を組み合わせることから得られます-レイヤーオンレイヤー、いくつかのテクニックはあなたに素晴らしい土地塊を与え、他のものはあなたに素晴らしい洞窟を与え、他のものは丘のために働き、そしてもっと多くが水システムのために働きます。
これを行う比較的簡単な方法は、ランダムな位置に多数の核を作成することです。これらの点のボロノイ図を描きます。結果の各領域に要素を割り当てます。
その結果、見た目はかなり醜く、機械的に見えます。境界線を少し濁らせれば、きちんとした形になります。
大きなマップを生成する場合は、2つのレベルでこれを行うことができます。たとえば、20個の核を使用して初期ボロノイ図を作成し、結果として得られる各地域を国と呼びます。400個の核を使用して別の図を作成し、結果の各領域を牧師館と呼びます。
国に完全に含まれるすべての牧師には、国の要素があります。2つ以上の国に部分的に含まれている牧師館は、ランダムにその包囲国の要素の1つを取ります。
この投稿は写真に値しますが、私はそれを提供するのが面倒です。
多角形マップジェネレーターは、さまざまな「ゾーン」を使用してマップを作成するのに適しています。これはボロノイ図に基づいていますが、これはその良い出発点になると思います。