Blokları kontrol eden ve orada ne olduğuna bağlı olarak olasılığı değiştiren bir algoritma kullanabilirsiniz - ama bence bu büyük ölçüde yanlış bir yaklaşım.
Bakmak istediğiniz şey fraktal gürültü türleridir - bu durumda perlin veya simpleks gürültü. Gürültü üretirseniz, -1 ile 1 arasında değerler alırsınız.
http://en.wikipedia.org/wiki/Perlin_noise
Daha sonra su seviyesini ayarlayarak su seviyenizi ayarlayabilirsiniz. Diğer bloklar için kaya ve çim arasında geçiş yapmak için ikinci bir gürültü seti çalıştırabilirsiniz. (bu şekilde büyük su yamalarınız olabilir, ancak daha küçük taş kümeleri olabilir).
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
}
Tarama ve atma yönteminin aşırı karmaşık olduğunu ve aşırı derecede sağlam ölçeklenebilir olmadığını düşündüğüm için, beğendiğim başka bir yöntem önereceğim:
Haritayı büyük karelere ayırarak haritanıza bir ızgara yerleştirin.
Her kavşakta rastgele bir sayı oluşturun (0 ile 1 arasında yüzdeleriniz için çalışır)
Her kareyi 4 çift kareye keserek alt bölümlere ayırın - eski çizgileri takip edin ve alt bölüm çizgilerini bulduğunuz yerde, birbirine bitişik 2 nokta arasında rastgele bir sayı oluşturun, benzer şekilde, haç merkezi için, en yüksek arasında bir nokta oluşturun. ve en düşük değerler.
Durulayın ve tekrarlayın. İlk geçişten ilk geçişi alacaksınız, ancak ikinci geçişler bazı tekdüzelik verecektir Psuedo-rastgele sayılar için özür dileriz:
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
Bu, üçgenler için daha da iyi çalışır, çünkü alt bölündüğünüzde çapraz çubuğunuz yoktur.
Tabii ki, mutlak en iyi sonuç bu yöntemleri birleştirmekten gelecek - katman üzerine katman, bazı teknikler size büyük kara kütleleri verecek, diğerleri size harika mağaralar verecek, diğerleri tepeler için çalışacak ve daha fazlası su sistemleri için çalışacak.