Możesz użyć algorytmu, który sprawdza bloki i zmienia prawdopodobieństwo w zależności od tego, co tam jest - ale myślę, że jest to w dużej mierze niewłaściwe podejście.
To, na co chcesz patrzeć, to fraktalne typy hałasu - w tym przypadku hałas perlinowy lub simpleksowy. Jeśli generujesz hałas, otrzymasz wartości od -1 do 1.
http://en.wikipedia.org/wiki/Perlin_noise
Następnie możesz wyregulować poziom wody, ustawiając próg progowy wytwarzanej wody. W przypadku innych bloków możesz uruchomić drugi zestaw hałasu, aby przełączyć się między skałą a trawą. (w ten sposób możesz mieć duże plamy wody, ale mniejsze grudki kamienia).
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
}
Ponieważ uważam, że metoda skanowania i podrzucania jest zbyt skomplikowana i niezbyt skalowalna, zasugeruję inną metodę, która mi się podobała:
Ułóż siatkę na mapie, dzieląc mapę na duże kwadraty.
Wygeneruj losową liczbę na każdym skrzyżowaniu (od 0 do 1 będzie działać dla twoich wartości procentowych)
Podziel, dzieląc każdy kwadrat na 4 równe kwadraty - podążaj za starymi liniami, a tam, gdzie znajdziesz linie podziału, wygeneruj losową liczbę między 2 sąsiadującymi punktami, podobnie dla środka krzyża, wygeneruj punkt, który leży pomiędzy najwyższymi i najniższe wartości.
Wypłukać i powtórzyć. Otrzymasz początkową losowość z pierwszego przejścia, ale te ostatnie podniosą jednolitość Przepraszamy za losowe liczby psuedo:
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
Działa to jeszcze lepiej w przypadku trójkątów, ponieważ nie masz zgubionej poprzeczki podczas podziału.
Oczywiście, absolutnie najlepszy wynik przyniesie połączenie tych metod - warstwa po warstwie, niektóre techniki dadzą ci wielkie masy lądowe, inne dadzą Ci niesamowite jaskinie, inne pracują na wzgórzach, a inne na systemach wodnych.