Anda bisa menggunakan algoritma yang memeriksa blok dekat, dan memvariasikan probabilitas tergantung pada apa yang ada - tapi saya pikir itu sebagian besar pendekatan yang salah.
Yang ingin Anda lihat adalah tipe noise fraktal - dalam hal ini, perlin atau noise simpleks. Jika Anda menghasilkan suara, Anda akan mendapatkan nilai dari -1 hingga 1.
http://en.wikipedia.org/wiki/Perlin_noise
Anda kemudian dapat menyesuaikan ketinggian air Anda dengan menetapkan ambang batas apa yang membuat air. Untuk blok lain Anda dapat menjalankan set kebisingan kedua untuk beralih antara batu dan rumput. (dengan cara ini Anda dapat memiliki bercak besar air, tetapi rumpun batu yang lebih kecil).
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
}
Karena saya pikir metode pemindaian dan pelemparan terlalu rumit dan tidak terlalu dapat diukur, saya akan menyarankan metode lain yang saya nikmati:
Letakkan kisi di peta Anda, pecahkan peta menjadi kotak besar.
Hasilkan angka acak di setiap persimpangan (antara 0 dan 1 akan bekerja untuk persentase Anda)
Membagi dengan memotong setiap kotak menjadi 4 kotak genap - ikuti garis lama, dan di mana Anda menemukan garis pembagian, menghasilkan angka acak antara 2 titik yang berdekatan, sama, untuk pusat salib, menghasilkan titik yang terletak di antara yang tertinggi dan nilai terendah.
Bilas, dan ulangi. Anda akan mendapatkan keacakan awal dari pass pertama, tetapi pass terakhir akan memberikan keseragaman Maaf untuk angka psuedo-acak:
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
Ini bekerja lebih baik untuk segitiga, karena Anda tidak memiliki bilah silang yang hilang saat Anda membagi.
Tentu saja, hasil terbaik mutlak akan datang dari menggabungkan metode ini - lapis demi lapis, beberapa teknik akan memberi Anda massa daratan yang besar, yang lain akan memberi Anda gua-gua yang mengagumkan, yang lain berfungsi untuk bukit, dan lebih banyak lagi akan bekerja untuk sistem air.