Алгоритм генерации случайных 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" вернул бы много хитов!