Ви можете використовувати алгоритм, який перевіряє поблизу блоків і змінює ймовірність залежно від того, що там є, - але я думаю, що це багато в чому неправильний підхід.
На що ви хочете дивитися, - це фрактальний шум - в цьому випадку перлін або симплекс-шум. Якщо ви генеруєте шум, ви отримаєте значення від -1 до 1.
http://en.wikipedia.org/wiki/Perlin_noise
Потім можна відрегулювати рівень води, встановивши порог того, що робить вода. Для інших блоків ви можете запустити другий набір шуму для перемикання між скелею та травою. (таким чином ви можете мати великі плями води, але менші грудочки каменю).
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
Це працює ще краще для трикутників, оскільки у вас немає втраченої поперечної смуги при підрозділі.
Звичайно, абсолютний найкращий результат вийде від поєднання цих методів - шар за шаром, деякі методи дадуть вам великі маси суші, інші дадуть вам приголомшливі печери, треті працюють на пагорбах, а більше працюватимуть для водних систем.