Які існують ідеальні алгоритми для генерації подібних до розбіжників 2D підземелля? [зачинено]


47

Які є хороші ресурси щодо створення процедурного контенту в контексті покоління підземелля?

Найближча стаття, яку я міг знайти, - це Алгоритм створення 2-лабіринту , що не зовсім те, що я шукаю. Особливості, такі як кімнати та підключені передпокої - ідеальні.

Дякую!


1
Також погляньте на покоління лабіринтів .
Ентоні

1
Є кілька статей на цю тему в RogueBasin
PATRY Гійом

Відповіді:


27

На це раніше відповіли більш-менш. Ваша перша зупинка повинна бути http://pcg.wikidot.com/

Оскільки мене звинуватили в тому, що це зовсім не корисна відповідь (справді? Хтось просить ресурс, а я публікую посилання на вікі, що займається цією темою? ), ця сторінка на вікі розглядає конкретно генератори підземелля та посилання на різні статті з цього питання.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

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


+1 для "усі ідеї дійсні", але я хотів би уточнити це: усі ідеї дійсні, але деякі працюватимуть краще, ніж інші. Ваша ідея <розпливчастий комп'ютерний жаргон тут> буде функціонувати , і, ймовірно, буде те, що ви хочете, але є й інші способи зробити це, які будуть більш ефективними, більш випадковими, більш згуртованими, більш налаштованими або будь-якою їх комбінацією, якщо ви не є дійсно добре або дуже пощастило.
Нік Хартлі

20

Мені вдалося отримати досить добре виглядаючі рівні за допомогою наступного алгоритму на основі квадратної сітки:

Спочатку створіть набір кімнат. Випадкові параметри визначають розмір кімнат та їх кількість. Адаптивний алгоритм міг би навіть визначити деякі зони, які виготовлені з великих прихожих, а інші з дуже малих кімнат.

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

Це дозволяє з невеликої кількості параметрів створювати дуже різні рівні вигляду, від розріджених масивних залів з невеликими коридорами, що з'єднують їх з вуликом, що виглядає лабіринтом тісно взаємопов'язаних камер.

Ось приклад згенерованого рівня.

введіть тут опис зображення

Виходячи з цього алгоритму, ви можете додати оздоблення стін, що залежить від зони, зробити коридори меншими або більшими, зробити спеціальні приміщення тощо.


10

Якщо вам подобається читання коду і ви можете розібрати C #, чи можу я запропонувати генератор підземелля, який використовує мій шахрайський Amaranth? Це тут . Він обробляє підключені кімнати, розширювані функції та деякі інші приємні речі.

Якщо ви зруйнуєте і складете весь проект, є автономний інструмент, який генерує та малює підземелля, щоб ви могли налаштувати його та побачити, як він працює.


1
Я наткнувся на Amaranth, як здається, місяці тому, але я забув це ім'я, коли я сам потрапив у покоління підземелля. Дякуємо за посилання!
Габріель Ізенберг

2
Ваша стаття у journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes теж дуже хороша, я використовую модифіковану версію цієї версії з кількома додатковими функціями, такими як різні двигуни в коридорі тощо.
Tobsta,

3

Все це чудові ідеї. Я взяв трохи від RogueBasin та pcg.wikidot.com і написав власну реалізацію в C #.

Мені дуже сподобався "природний" вигляд печерних рівнів, які можна створити за допомогою методу стільникових автомати. Щоб зрозуміти, що я маю на увазі під методом стільникових автоматів, уявіть «Гра життя» Конвея. Мій код використовує метод 4-5, який означає, що плитка стане стіною, якщо це стіна, і 4 або більше дев'яти її сусідів - це стіни, або якщо це не стіна, і 5 і більше сусідів - це стіни. Я починаю, заповнюючи карту випадковим чином стіни або пробіл, потім відвідую кожну позицію x / y ітераційно і застосовую правило 4-5. Щоб допомогти полегшити проблему формування ізольованих печер, після заповнення карти випадковим чином я заповнюю горизонтальну лінію по всій карті, встановивши кожну плитку на пробіл замість стіни, перш ніж застосувати правило 4-5 до кожної плитки.

Ви можете переглянути код для мого класу обробника карт та будь-які вдосконалення, які я тут вношу

або архівовану версію тут .


2
Це питання має багато голосів, і було б краще, якби ви могли трохи більше відкрити цю відповідь. З часом посилання вмирають, тому намагайтеся відповісти так, що не потрібно клацати посилання. Як це працює? Яка головна ідея? Чим він відрізняється від інших алгоритмів?
Кату

1
Посилання насправді померло.
htmlcoderexe

2

Я думаю, що найбільш прямим місцем для пошуку цього є власне перегляд вихідного коду. Два основні гравці в цій галузі, Ангбанд та Nethack, обидва є відкритим кодом.


3
Хоча я пам’ятаю, що з відкритим кодом не є надзвичайно добре задокументованим джерелом або прозорим джерелом або написаним для вивчення з джерела. Їх легко зламати, але набагато складніше загартувати.
Том Хадсон

Можливо, оригінали не є великими посиланнями, але існує величезна кількість варіантів, деякі з яких є чудовими. Наприклад, розробник UnAngband зробив низку вдосконалень для покоління підземелля та написав низку чудових публікацій у блозі , тож ви точно можете використовувати ідеї, якщо не код.
congusbongus

Джерело NetHack, як відомо, важко зрозуміти. Генератор підземелля (ОДНЕ з них) розкинуто на не менше ТРИ файлів C, а приблизно на 15 функцій
Élektra,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.