Мені вдалося отримати досить добре виглядаючі рівні за допомогою наступного алгоритму на основі квадратної сітки:
Спочатку створіть набір кімнат. Випадкові параметри визначають розмір кімнат та їх кількість. Адаптивний алгоритм міг би навіть визначити деякі зони, які виготовлені з великих прихожих, а інші з дуже малих кімнат.
Потім потрібно переконатися, що всі кімнати з'єднані між собою. Для цього запустіть довідник, щоб копати коридори (скажімо, A *) між кожною парою кімнат, надаючи довільно вибрану вагу існуючим просторам (кімнатам чи іншим коридорам) порівняно з простором, який ще не був вирізаний (стіни). Якщо різниця у вазі невелика, копання нових коридорів буде досить дешевим, а алгоритм зробить багато коридорів між кімнатами, маючи багато можливостей переходити з місця в інше. Якщо різниця у вазі велика, алгоритм вважатиме за краще пройти через існуючі кімнати та коридори, зробивши доріжки більш обтяжливими та з меншим вибором для досягнення певного пункту призначення.
Це дозволяє з невеликої кількості параметрів створювати дуже різні рівні вигляду, від розріджених масивних залів з невеликими коридорами, що з'єднують їх з вуликом, що виглядає лабіринтом тісно взаємопов'язаних камер.
Ось приклад згенерованого рівня.
Виходячи з цього алгоритму, ви можете додати оздоблення стін, що залежить від зони, зробити коридори меншими або більшими, зробити спеціальні приміщення тощо.