Алгоритм генерации случайных 2D-карт
может ли кто-нибудь сказать мне способ создания островных структур или горных структур, таких как в minecraft?
Я просто ищу правильную теорию для генерации случайной формы, но она должна содержать определенный базовый шаблон..
like: острова должны быть округлены, но варьироваться по форме и масштабу ( минимальная/максимальная ширина и высота ).
или: реки не должны быть прямыми, они должны иметь кривые и случайную ширину.
или даже: создание некоторого рода леса, где деревья расположены таким образом, что пользователь все еще может ходить по лесу (это простой, я думаю, просто скажите, что некоторые блоки вокруг дерева должны оставаться пустыми, если код пытается поместить больше деревьев вокруг последнего)
какую математику я могу использовать для таких вещей?
Я был бы рад за некоторые ссылки для учебников или ссылок. Я искал по всему интернету в течение нескольких часов, но все, что я мог найти, это некоторые книги, чтобы купить, как "игровая математика" или что-то, но мой бюджет равен нулю.
EDIT:
прежде всего, я сожалею о своем плохом английском.
среднее я хочу поблагодарить всех вас за ваши ответы. Это отличные рекомендации, и я потрачу много времени, чтобы углубиться в это.
3 ответов
Я настоятельно рекомендую посмотреть на информация об игровом программировании Амита и другие сообщения в блоге им. У него была целая серия по созданию реалистичных карт с реками, береговыми линиями и т. д.
Дом Мира
хотя процедурная генерация карты может быть применена к мирам без сетки, чаще всего используется с сетками. Просмотр в один момент времени, сгенерированные игровые карты редко так хороши, как миры ручной работы. Однако, они имеют 3 Преимущества: (1) недорогой в мир если там много миров, котор нужно сделать, (2) больше значения воспроизведения потому что следующее время через мир отличается, и (3) потенциал для мира развивается по ходу игры.
- Генератор карт мира Амита
- процедурная генерация контента: генерация местности, городов, зданий
- поколение подземелий в Unangband
- генерация игровых миров с структура замка и ключа так, что некоторые комнаты требуют объектов от других комнат
- алгоритм построения рек
- добавление рек к случайно сгенерированной местности
- оригинальный алгоритм Rogue для генерации подземелий
- 11 алгоритмов генерации лабиринта с демонстрациями и кодом
- использование функций шума для создания пещер, таких как в Terraria и Minecraft
- номера неправильной формы, простые алгоритм
- изменение размеров внутренних областей комнаты
проходчик для рытья подземелья в DungeonMaker- руководство по методам генерации случайной местности
- Wiki руководство по процессуальной генерации контента
- Моделирование Больших Виртуальных Миров
Амит по генерация полигональных карт для игр (первый пункт в списке) - очень впечатляющая статья, которая говорит о логике генерации разумных очертаний береговых линий, островов, рек, гор и т. д. Очень впечатляющая работа!
Метод "Выращивания" Рек В Случайно Сгенерированном Мире [включено в список выше] довольно простой алгоритм генерации пути реки на основе других "плиток" на карте, например, их типа и высоты.
Я однажды нашел отличный сайт для теории, когда я сделал rougelike. посмотреть.
довольно часто карты логически разбиваются на слои / наложения, такие как" базовая высота местности"," уровень воды"," высокогорье"," деревья"," жилье " и т. д.
затем для каждого слоя запускается другой тип генератора. Очень часто фракталы используются, потому что они имеют тенденцию генерировать интересные и трудно предсказать формы. Но используется только часть фрактала. Использование целого мгновенно разоблачит структуру (на фракталах верхнего уровня очень повторяющиеся), и зрители заметят он. Таким образом, сгенерированный фрактал затем искажается/модифицируется/фильтруется/вырезается, так что это не будет очевидно. Например, вы можете сгенерировать базовый уровень местности с помощью простого X-Y тригонометрического осциллятора, а затем суммировать его с частью вашего фрактального изображения, ограниченной некоторыми значениями min-max, и вы получите неровную местность с заметными холмами и падениями..
для всех других слоев вы обычно не можете "суммировать", потому что слои, отличные от terrain, не имеют "высоты" или "плотности", но скорее они 0/1-поместите дерево здесь или не поместите дерево здесь? Но опять же, вы выполняете это аналогично: вы генерируете некоторое изображение (возможно, фрактал снова), затем проверяете числа и устанавливаете пороговое значение: везде, когда число выше/ниже X, вы размещаете/не размещаете вещь. Вы можете дополнительно фильтровать или ветвить его: например, если дерево попадет в подводное положение, поместите туда рыбу или не поместите дерево вообще.
Я surprosed вы не могли найти ресурсы на нем. Несколько лет назад googling для "алгоритмов генерации terrain" вернул бы много хитов!