Головна Ігрова розробка та Процедурна генерація Процедурний генератор підземель

🏰 Процедурний генератор підземель

Генеруйте ігрові рівні трьома способами: BSP-розбиття з кімнатами й коридорами, випадкове розміщення кімнат із кістяковим деревом L-коридорів, або печери на клітинних автоматах. З сідом для відтворюваності.

Ігрова розробка та Процедурна генерація3DСередній60 FPS
procedural-dungeon ↗ Відкрити окремо
DRAG · SCROLL · CLICK — керуйте прямо у вікні симуляції.

Про цю симуляцію

Ця симуляція будує карту ігрового рівня «на льоту» за допомогою трьох перемикних алгоритмів: Binary Space Partitioning (BSP), який рекурсивно розбиває карту й розміщує кімнату в кожному листі дерева; генератора випадкових кімнат, що розкидає непересічні прямокутники й з'єднує їх ланцюгом найближчих сусідів; і печери на клітинних автоматах, яка починається з випадкового шуму й згладжується класичним правилом «4-5». Сідований LCG (лінійний конгруентний генератор) керує кожним випадковим вибором, тож той самий сід завжди відтворює точно ту саму карту.

🔬 Що показано

Сітчасте підземелля, відрендерене на полотні, де тайли забарвлені за типом: темні для стін, зеленуваті для підлоги кімнат, синьо-сірі для коридорів і сірі для органічної підлоги печер. Після генерації подвійний пошук у ширину знаходить дві найвіддаленіші клітинки підлоги (позначені зеленим для старту та червоним для виходу) і повідомляє довжину найдовшого шляху та відсоток клітинок підлоги, досяжних зі старту — пряму міру зв'язності карти.

🎮 Як користуватись

Перемикайтеся між BSP, Кімнатами й Печерою за допомогою кнопок алгоритму. Налаштуйте розмір карти (24–80 клітинок на сторону), цільову кількість кімнат і мін./макс. розмір кімнати для BSP і Кімнат; для Печери керуйте початковим відсотком заповнення й кількістю проходів згладжування. Введіть числовий сід або натисніть «Новий сід», щоб дослідити інші планування, і перемкніть накладання структури, щоб побачити лінії поділу BSP та контури кімнат.

💡 Чи знали ви?

Правило клітинного автомата для печер, використане тут — тайл стає стіною, якщо 5 або більше з його 8 сусідів є стінами, інакше стає підлогою — це те саме «правило 4-5», популяризоване для генерації печер у roguelike-іграх, бо кілька проходів згладжування надійно перетворюють випадковий шум на зв'язні, органічні на вигляд печери взагалі без жодної логіки пошуку шляху.

Поширені запитання

Що таке генерація підземель методом Binary Space Partitioning (BSP)?

Генерація BSP рекурсивно розбиває прямокутну область на два менші прямокутники, чергуючи горизонтальні та вертикальні розрізи, доки кожна область не стане достатньо малою, щоб вмістити одну кімнату. Потім у кожному листовому вузлі розміщується кімната, а кімнати з'єднуються прямими або L-подібними коридорами в порядку їх створення. Це створює підземелля з природною деревоподібною структурою й мінімумом перекриттів кімнат, і це один із найпоширеніших методів у roguelike-іграх, бо він гарантує непересічні кімнати без жодної перевірки на зіткнення.

Як алгоритм випадкових кімнат уникає перекриття кімнат?

Генератор багаторазово пропонує кімнату випадкової ширини й висоти у випадковій позиції, а потім перевіряє її на перекриття з кожною раніше розміщеною кімнатою, використовуючи перекриття обмежувальних прямокутників, вирівняних за осями, з буфером в один тайл. Якщо вона перекриває наявну кімнату, спроба відкидається і пробується нова — до обмеженої кількості спроб. Коли достатня кількість непересічних кімнат уже є, вони з'єднуються жадібним ланцюгом найближчих сусідів, за духом схожим на побудову мінімального кістякового дерева, з L-подібним коридором, що приєднує кожну нову кімнату до мережі.

Яке правило клітинного автомата використовується для алгоритму печер?

Печера починається як сітка, випадково заповнена стінами у вибраному відсотку від 35 до 60. Потім вона згладжується протягом кількох проходів: на кожному проході кожен тайл підраховує, скільки з його 8 навколишніх сусідів є стінами, і сам стає стіною, якщо стінами є 5 або більше сусідів, інакше стає підлогою. Повторення цього кілька разів усуває ізольований шум і перетворює малі скупчення стін на гладкі, органічні стіни печери — той самий принцип, що лежить в основі «Гри в життя» Конвея, застосований до генерації рівнів.

Як сідований генератор випадкових чисел робить карти відтворюваними?

Симуляція використовує лінійний конгруентний генератор, або LCG: просту формулу, яка повторно перетворює внутрішній 32-бітний стан за допомогою множення й додавання з фіксованими константами, створюючи детермінований потік псевдовипадкових чисел. Оскільки генератор скидається до того самого значення сіда щоразу при натисканні «Генерувати», введення того самого сіда з тим самим алгоритмом і параметрами завжди створює ідентичне планування підземелля, тому поле сіда й кнопка «Новий сід» дозволяють зберегти або відтворити конкретну карту.

Що означають статистики зв'язності та найдовшого шляху?

Після генерації підземелля симуляція запускає пошук у ширину від однієї клітинки підлоги, щоб знайти найвіддаленішу досяжну клітинку, а потім запускає другий пошук у ширину від тієї клітинки, щоб знайти справжній діаметр зв'язної області — класична техніка «подвійного BFS» для знаходження найдовшого найкоротшого шляху в неозваженому графі. Дві кінцеві точки стають маркерами старту й виходу, довжина шляху між ними показується як «Найдовший шлях», а «Зв'язність» повідомляє, який відсоток усіх клітинок підлоги досяжний зі старту, що вказує, чи має печера або підземелля ізольовані, недосяжні кишені.

Схожі симуляції