Страница 1 из 1

Генерация карты в стиле церкви из 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

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

Добавлено: 11 ноя 2014, 09:05
Apromix
Прикольненько :D Добавь такой алгоритм в BeaRLibMG :D