Данная работа выполнена в качестве практики во 2-м семестре 3-го курса программы ПМИ в РТУ МИРЭА.
cd ./source
g++ *.cpp -o main.exe
.\main.exe
Разработать модель карты города и реализовать её процедурную генерацию для каждой новой игровой сессии.
Карта должна состоять из параллельных пластов прямоугольных районов (горизонтальные линии районов должны быть параллельны друг другу), в которых есть по несколько домов. От каждой двери дома провести тропинку, идущую к более крупной дороге, окружающей район. Размеры карты, домов, дорог, а также количество районов и домов в них реализовать в виде входных параметров, от которых также зависит генерация.
Общая структура карты города будет выглядеть следующим образом (красным выделены двери домов):
Рисоваться карта будет в текстовом редакторе "Блокнот" и будут использованы следующие обозначения:
- "*" - границы города;
- "H" - дороги (и тропинки, и основные дороги);
- "D" - дверь дома;
- "1" - границы дома;
- "2" - внутренняя часть дома;
- "0" - пустое пространство на карте.
В качестве параметров для генерации используем:
- height - высота карты в количестве символов без учета границы и дорог;
- heightCount - количество районов в высоту;
- width - ширина карты в количестве символов без учета границы и дорог;
- wideCount - количество районов в ширину;
- roadSize - ширина основных дорог в количестве символов (для тропинок ширина постоянная и равна 1);
- diffPercent - коэффициент искажения размера района относительно среднего размера, вычисленного по формуле
$\frac{height}{heightCount}$ или$\frac{width}{wideCount}$ в зависимости от расположения (от 0 до 1); - housePercent - зависимость количества домов в районе от его размеров (от 0 до 1).
Всю информацию по постановке задачи, алгоритму и реализации процедурной генерации карты города можно найти в отчёте по практике.
Три разные реализация модели для параметров height = 45, width = 60, wideCount = 3, heightCount = 3, diffPercent = 0.25, roadSize = 2, housePercent = 0.33 выглядят так:
1.