Sie könnten einen Algorithmus verwenden, der in der Nähe von Blöcken prüft und die Wahrscheinlichkeit abhängig davon variiert, was vorhanden ist - aber ich denke, es ist größtenteils der falsche Ansatz.
Was Sie betrachten möchten, sind fraktale Rauscharten - in diesem Fall Perlin- oder Simplex-Rauschen. Wenn Sie Rauschen erzeugen, erhalten Sie Werte von -1 bis 1.
http://en.wikipedia.org/wiki/Perlin_noise
Sie können dann Ihren Wasserstand anpassen, indem Sie den Schwellenwert für die Wassermenge festlegen. Für die anderen Blöcke können Sie einen zweiten Satz Geräusche ausführen, um zwischen Fels und Gras zu wechseln. (Auf diese Weise können Sie große Wasserflecken, aber kleinere Steinklumpen haben).
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
}
Da ich der Meinung bin, dass die Scan- und Toss-Methode zu kompliziert und nicht zu robust skalierbar ist, schlage ich eine andere Methode vor, die mir gefallen hat:
Legen Sie ein Raster über Ihre Karte und teilen Sie die Karte in große Quadrate auf.
Generieren Sie an jeder Kreuzung eine Zufallszahl (zwischen 0 und 1 funktioniert für Ihre Prozentsätze).
Unterteilen Sie, indem Sie jedes Quadrat in 4 gerade Quadrate schneiden. Folgen Sie den alten Linien. Wenn Sie die Unterteilungslinien finden, generieren Sie eine Zufallszahl zwischen den beiden benachbarten Punkten. Generieren Sie für die Mitte des Kreuzes einen Punkt, der zwischen den höchsten liegt und niedrigste Werte.
Spülen und wiederholen. Sie erhalten die anfängliche Zufälligkeit aus dem ersten Durchgang, aber die letzten Durchgänge ergeben eine gewisse Einheitlichkeit. Entschuldigen Sie die Pseudozufallszahlen:
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
Dies funktioniert noch besser für Dreiecke, da Sie beim Unterteilen nicht den verlorenen Querbalken haben.
Das absolut beste Ergebnis wird natürlich durch die Kombination dieser Methoden erzielt - Schicht für Schicht erhalten einige Techniken großartige Landmassen, andere fantastische Höhlen, andere arbeiten für Hügel und mehr für Wassersysteme.