Методы генерации карты


27

Я пытаюсь создать простую, «случайно» сгенерированную карту для маленькой игры.

Игра состоит из нисходящего вида на мир с массивами суши и океана. Например, подумайте о простой контурной карте мира.

Самым близким, что я мог вспомнить из того, что я видел раньше, был генератор уровней для старых игр SimCity или серии Civ , где вы можете установить предпочтение для одного континента, а не для многих островов и т. Д.

Какой алгоритм подойдет? Карта должна быть умеренно масштабируемой, чтобы у меня был вид «всего мира», а также более локальный вид с увеличенным масштабом, но я думаю, что разберусь с этим позже.

Изначально мне не нужно никакого понятия высоты, просто две области - суша и море, хотя я мог бы расширить это позже.


Я размышлял в русле генерации, используя какую-то функцию перлин-шума, но не уверен, как получить из того, что по сути является 2D-картой высот, к набору линий, соединяющих все области на высоте X.
Cylindric

Ответы:


21

«Знаменитый» Амит (с огромной страницей различных тем по программированию игр) имеет блог по программированию игр, и он только что закончил учебник из трех частей, посвященный интересному методу генерации карт. Я действительно наслаждался чтением, и в нижней части третьей статьи есть рабочая демонстрация, которая является довольно звездной.

«Генерация карт полигонов» часть 1 , часть 2 , часть 3 .

Это может быть техника, которую вы хотите адаптировать к вашим потребностям! По крайней мере, он упоминает алгоритмы, которые он использует на каждом этапе процесса: он начинает с генерации многоугольников Вороного , ослабляет их до более равномерного распределения с помощью релаксации Ллойда , использует «простую функцию для разделения мира на землю и воду» , а затем наводнения заполняют, чтобы определить океаны и озера. Звучит так, будто вы можете остановиться там или продолжить чтение гор и долин, превратить его в 3D и так далее.


2
Ух ты, я использовал огромное количество руководства Амита, чтобы выучить A *. Как будто он смотрит мне в голову :) Время сделать татуировку "<3 Amit" ...
Цилиндрический

1
Это действительно здорово
Colm

Вороной, мило. :)
user712092
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.