Алгоритм создания произвольной 2D-плитки-карты
Может ли кто-нибудь сказать мне способ создания островных структур или конструкций холмов, как в minecraft?
Я просто ищу подходящую ТЕОРЮЮ для создания случайной формы, но она должна содержать определенный базовый шаблон.
: острова должны быть округлены, но имеют форму и масштаб (минимальная/максимальная ширина и высота).
или: реки не должны быть прямыми, они должны иметь кривые и случайную ширину.
или даже: создание какого-то леса, где деревья размещаются таким образом, что пользователь все равно может пройтись по лесу (что простое, я думаю, просто скажу, что некоторые блоки вокруг дерева должны оставаться пустыми, если код пытается поместить больше деревьев вокруг последнего)
Какую математику я могу использовать, чтобы делать такие вещи?
Я был бы рад некоторым ссылкам для учебников или ссылок. Я работаю по всему Интернету несколько часов, но все, что я мог найти, это книги, которые можно купить как "математика игры" или что-то в этом роде, но мой бюджет равен нулю.
EDIT:
Прежде всего, я сожалею о своем плохом englisch.
Вторичный Я хочу поблагодарить всех вас за ваши ответы. Это отличные ссылки, и я потрачу много времени, чтобы углубиться в это.
Ответы
Ответ 1
Я настоятельно рекомендую посмотреть Amits Game Programming Information и другие сообщения в блоге от него. У него была целая серия по созданию реалистично выглядящих карт с реками, береговыми линиями и т.д.
Построение мира
Хотя создание процедурной карты может быть применено к сетям без сетки, его чаще всего используют с сетками. Рассматриваемый в один момент времени, сгенерированные игровые карты редко так же хороши, как созданные вручную миры. Однако у них есть три преимущества: (1) более низкая стоимость на мир, если многие миры должны быть сделаны, (2) больше значения повтора, потому что следующий время через мир отличается, и (3) потенциал для мира развивается, пока игра прогрессирует.
- Amits Генератор карт мира
- Построение процедурного контента: создание местности, городов, зданий.
- Создание подземелий в Unangband
- Создание игровых миров с блокировкой и ключом, чтобы некоторые комнаты нуждались в объектах из других комнат.
- Алгоритм построения рек
- Добавление рек к случайно созданной местности
- Оригинальный алгоритм Rogue для создания подземелий
- 11 Лабиринт Генерирующие алгоритмы с демонстрацией и кодом
- Использование шумовых функций для создания пещер, таких как Terraria и Minecraft
- Номера неправильной формы, простой алгоритм
- Изменчивые области внутренних помещений.
- Алгоритм туннелеров для подкачки подземелий в DungeonMaker
- Руководство по случайным методам генерации ландшафта
- Вики-руководство по созданию процедурного контента
- Имитация больших виртуальных миров
Amit Создание многоугольной карты для игр (первый элемент в списке) - чрезвычайно впечатляющая статья, в которой говорится о логика создания разумных форменных береговых линий, островов, рек, гор и т.д. Очень впечатляющая работа!
Метод для "роста" рек в случайно сгенерированном мире
[включен в список выше] довольно простой алгоритм для создания речного пути, основанный на других "плитах" на карте, например. их тип и высота.
Ответ 2
Когда-то я нашел отличный сайт для теории, когда я сделал роггелику. Посмотрите.
Ответ 3
Довольно часто карты логически разделяются на слои/оверлеи, такие как "высота базовой поверхности", "уровень воды", "высокогорье", "деревья", "жилье" и т.д.
Затем для каждого слоя запускается другой тип генератора. Очень часто используются фракталы, потому что они имеют тенденцию создавать интересные и трудно предсказать формы. Но используется только часть фрактала. Использование целого было бы мгновенно разоблачить структуру (на фракталах верхнего уровня очень повторяющиеся), и зрители заметили бы это. Таким образом, сгенерированный фрактал затем искажается/модифицируется/фильтруется/вырезается, чтобы это не было очевидно. Например, вы можете генерировать базовый уровень местности с помощью простого тригонометрического генератора XY, а затем суммировать его с частью вашего фрактального изображения, ограниченным некоторыми значениями min-max, и вы получите неровный ландшафт с заметными холмами и каплями..
Для всех остальных слоев вы обычно не можете "суммировать", потому что слои, отличные от ландшафта, не относятся к "высоте" или "плотности", а скорее относятся к 0/1 - поместите дерево здесь или нет, чтобы поместить дерево Вот? Но опять же вы выполняете его аналогично: вы генерируете некоторое изображение (возможно, фрактал снова), затем проверяете числа и устанавливаете пороговое значение: везде, когда число выше/ниже X, вы помещаете/замещаете вещь. Вы можете дополнительно фильтровать или разветвлять его: например, если дерево попало в положение под водой, поместите там рыбу или не разместите дерево вообще.
Я удивлен, что вы не можете найти ресурсы на нем. Несколько лет назад googling для "алгоритмов генерации ландшафта" возвращал много обращений!