Відповіді:
Існує маса різноманітних способів виготовлення лабіринтів. Тут представлений величезний перелік їх та їх описи: http://www.astrolog.org/labyrnth/algrithm.htm
Я думаю, що я використав той, що описаний у "Ідеально".
Я віддаю перевагу щільно накрученим лабіринтам, які створює Алгоритм Крускала.
Стандартний опис алгоритму Крускала недоцільний тим, що він не дозволяє відрізнити місця на графіку від груп розташування, при цьому покладаючись на каламбур щодо вибору структури даних, що призводить до неоднозначності опису, що бентежать новачків. Тому я відкидаю термологію Крускала.
Я буду використовувати такі терміни:
І з них ми отримуємо:
У Вікіпедії є чудовий ресурс для генерації лабіринтів . Я використовую алгоритм рандомізованих праймерів з чудовими результатами. Алгоритм поділу виглядає цікаво, але я його ніколи не використовував.
Ось приклад вікіпедії праймерів на роботі.
Один простий спосіб - скласти список північних стін і західних стін, а потім переставити їх. Дайте кожній кімнаті номер. Потім підірвіть одну зі стін у списку, доки дві кімнати не мають однакової кількості, а потім попросіть одне з номерів у всі інші кімнати з тим самим номером. Продовжуйте рухатися, поки не закінчите стін. Це працює для прямокутних лабіринтів або, справді, будь-якого іншого лабіринту, де можна навести список "потенційно пов'язаних кімнат". Крім того, це досить просто програмувати.
Я також хотів би ознайомитися з деякими алгоритмами, які використовуються в розробці Roguelike. У басейні Rogue є гарний стартовий ресурс
Тут добре пробігаються: https://journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes/
Основними кроками були:
Ви запитали, який я використовував, тож я обов’язково відповім на це. Я використовував рекурсивний алгоритм зворотного трекеру в моїй грі в лабіринті на Іграх Rootbeer .
Це свідчення того, що я використовував алгоритм, не розглядайте його як рекламу моєї роботи.