Генерация карты в стиле церкви из Diablo

lanceranr.rlgclub.ru

Модератор: Харука-тян

Ответить
Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Генерация карты в стиле церкви из Diablo

Сообщение Харука-тян » 13 ноя 2013, 10:47

Рецепт довольно прост, а результат радует глаз. (примеров кода пока не будет, постараюсь объяснить на пальцах)
Шаг первый: двоичная карта 40х40
Изначально выбирается ориентация центрального прохода, вертикальная или горизонтальная, выбираются залы (один, два или три, по краям и в середине прохода. Если по краям прохода залы есть, в редедине он обязан быть).
Залы и корридор отрисовываются на двоичную карту, начинается рекурсивная генерация комнат для каждого из залов:
  • с вероятностью 75% направление приращения меняется на противоположное (изначально оно аналогично ориентации центрального прохода).
  • Делается 20 попыток вставить комнату шириной и высотой (1d3)*2 (не путать с 2d3) в отрицательном направлении (влево или вверх). Комната пристраивается своей серединой ровно к середине текущей. Если нигде не касается уже существующих комнат, комната отрисовывается на карту и рекурсивно расширяется.
  • Не зависимо от того, подошла последняя примерка или нет, она примеряется в положительном направлении. Если здесь она подходит - рисуем, рекурсивно расширяемся отсюда.
После рекурсивного расширения требуется сверить число клеток пола, если оно ниже порогового значения, начинаем всё сначала.
Шаг второй: карта-маска и основной карта 80х80
Здесь карта просто масштабируется,превращая одну клетку в квадрат 2х2. Для стен единичной толщины делается исключение, от них остаются только левая и/или верхняя часть.

Код: Выделить всё

##  ## #. ##
##  #. #. ..
После этого двоичная карта переделывается в карту-маску (по виду соответствующего квадрата 2х2 основной карты определяется, стена здесь угол стены, пол, арка, или колонна). После незначительных косметических преобразований начинается построение комнат. Генератор ищет кусок вертикальной стены или горизонтальной стены и пытается его продолжить. Если перегородка получается достаточной длины, она становится стеной и в ней выбирается дверь. В конце по карте-маске рендерится основная карта (на каждый тайл карты-маски есть набор 2х2 тайлов для основной карты).

Визуализация: https://www.dropbox.com/sh/th3prr65o8m1h9z/4ra8ucS-wf
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Генерация карты в стиле церкви из Diablo

Сообщение Apromix » 11 ноя 2014, 09:05

Прикольненько :D Добавь такой алгоритм в BeaRLibMG :D

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость