Шаг первый: двоичная карта 40х40
Изначально выбирается ориентация центрального прохода, вертикальная или горизонтальная, выбираются залы (один, два или три, по краям и в середине прохода. Если по краям прохода залы есть, в редедине он обязан быть).
Залы и корридор отрисовываются на двоичную карту, начинается рекурсивная генерация комнат для каждого из залов:
- с вероятностью 75% направление приращения меняется на противоположное (изначально оно аналогично ориентации центрального прохода).
- Делается 20 попыток вставить комнату шириной и высотой (1d3)*2 (не путать с 2d3) в отрицательном направлении (влево или вверх). Комната пристраивается своей серединой ровно к середине текущей. Если нигде не касается уже существующих комнат, комната отрисовывается на карту и рекурсивно расширяется.
- Не зависимо от того, подошла последняя примерка или нет, она примеряется в положительном направлении. Если здесь она подходит - рисуем, рекурсивно расширяемся отсюда.
Шаг второй: карта-маска и основной карта 80х80
Здесь карта просто масштабируется,превращая одну клетку в квадрат 2х2. Для стен единичной толщины делается исключение, от них остаются только левая и/или верхняя часть.
Код: Выделить всё
## ## #. ##
## #. #. ..
Визуализация: https://www.dropbox.com/sh/th3prr65o8m1h9z/4ra8ucS-wf