Какие идеальные алгоритмы для генерации 2D-подземелий в стиле Rogue? [закрыто]


47

Каковы хорошие ресурсы относительно генерации процедурного контента в контексте генерации подземелий?

Самой близкой статьей, которую я смог найти, был Алгоритм создания 2d лабиринта , который не совсем то, что я ищу. Такие функции, как номера и соединенные коридоры, идеальны.

Спасибо!


1
Кроме того, взгляните на поколение лабиринтов .
Энтони

Ответы:


27

Это было более или менее ответили раньше. Ваше первое место остановки должно быть http://pcg.wikidot.com/

Так как меня обвинили в том, что это вообще не является полезным ответом (правда? Кто-то просит ресурс, и я публикую ссылку на вики, посвященную этой теме? ), эта страница в вики посвящена генераторам Dungeon и ссылкам на различные статьи по этой теме.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

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


+1 за «все идеи верны», но я хотел бы уточнить: все идеи верны, но некоторые будут работать лучше, чем другие. Ваша идея <смутный компьютерный жаргон здесь> будет работать и, вероятно, будет именно тем, что вам нужно, но есть другие способы сделать это, которые будут более эффективными, более случайными, более связными, более настраиваемыми или любой их комбинацией, если только вы не являетесь действительно хорошо или действительно везет.
Ник Хартли

20

Мне удалось получить достаточно хорошо выглядящие уровни, используя следующий алгоритм, основанный на квадратной сетке:

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

Затем вам нужно убедиться, что все комнаты связаны друг с другом. Для этого запустите поисковик, чтобы вырыть коридоры (скажем, A *) между каждой парой комнат, придавая произвольно выбранный вес существующим пространствам (комнатам или другим коридорам) по сравнению с пространством, еще не вырезанным (стены). Если разница в весе невелика, то рытье новых коридоров будет достаточно дешевым, и алгоритм создаст много коридоров между комнатами с множеством возможностей перехода из одного места в другое. Если разница в весе велика, тогда алгоритм предпочтет пройти через существующие комнаты и коридоры, делая пути более извилистыми и с меньшим количеством вариантов для достижения определенного места назначения.

Это позволяет из небольшого числа параметров создавать очень разные по виду уровни, из редких массивных залов с небольшими коридорами, связывающими их, в лабиринт из тесно связанных друг с другом камер.

Вот пример сгенерированного уровня.

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

Основываясь на этом алгоритме, вы можете добавить отделку стен, которая зависит от зоны, сделать коридоры меньше или больше, сделать специальные комнаты и так далее.


10

Если вам нравится читать код и разбирать C #, могу ли я предложить генератор подземелий, который использует мой roguelike Amaranth? Это здесь . Он обрабатывает смежные комнаты, расширяемые функции и некоторые другие приятные вещи.

Если вы потянете вниз и соберете весь проект, есть отдельный инструмент, который будет генерировать и рисовать подземелья, чтобы вы могли настроить его и посмотреть, как он работает.


1
Я столкнулся с Амарантом, что кажется месяцами назад, но я забыл имя к тому времени, когда сам попал в поколение подземелий. Спасибо за ссылку!
Габриэль Изенберг

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

3

Все это отличные идеи. Я взял немного от RogueBasin и pcg.wikidot.com и написал свою собственную реализацию на C #.

Мне очень понравился «естественный» вид пещерных уровней, которые можно получить с помощью метода клеточных автоматов. Чтобы понять, что я подразумеваю под методом клеточных автоматов, представьте игру жизни Конвея. Мой код использует то, что называется методом 4-5, что означает, что плитка станет стеной, если она является стеной, а 4 или более из ее девяти соседей являются стенами или если это не стена и 5 или более соседей являются стенами. Я начинаю с случайного заполнения карты стенами или пробелами, затем итеративно посещаю каждую х / у позицию и применяю правило 4-5. Чтобы облегчить проблему формирования изолированных пещер, после случайного заполнения карты я закрываю горизонтальную линию поперек карты, устанавливая каждую плитку в пространство вместо стены, прежде чем применять правило 4-5 к каждой плитке.

Вы можете просмотреть код для моего класса обработчика карты и любые улучшения, которые я здесь сделаю

или архивную версию здесь .


2
Этот вопрос имеет много голосов, и было бы лучше, если бы вы могли открыть этот ответ немного больше. В конце концов, ссылки, как правило, умирают, поэтому постарайтесь ответить так, чтобы не было необходимости нажимать на ссылки. Как это работает? Какая основная идея? Чем он отличается от других алгоритмов?
Кату

1
Ссылка действительно умерла.
htmlcoderexe

2

Я думаю, что самое непосредственное место, где можно найти это, - это посмотреть исходный код. Два основных игрока в этой области, Angband и Nethack, имеют открытый код.


3
Хотя с открытым исходным кодом, из того, что я помню, нет ни хорошо-документированного, ни прозрачно-исходного, ни написанного для обучения источника. Их легко взломать, но гораздо сложнее в целом.
Том Хадсон

Может быть, оригиналы не очень хорошие ссылки, но есть огромное количество вариантов, некоторые из которых превосходны. Например, разработчик UnAngband внес ряд улучшений в поколение подземелий и написал серию отличных постов в блоге , так что вы можете определенно использовать идеи, если не код.
congusbongus

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