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

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

Ближайшая статья, которую я мог найти, была Алгоритм для создания лабиринта 2d , что не совсем то, что я ищу. Особенности, такие как номера и соединенные коридоры, идеальны.

Спасибо!

43 голоса | спросил 2 revs
Gabriel Isenberg
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

5 ответов


26

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

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

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

ответил Cody The Coder 25 AM00000050000001531 2015, 05:04:15
18

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

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

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

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

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

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

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

ответил Cody The Coder 25 AM00000050000001531 2015, 05:04:15
9

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

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

ответил Cody The Coder 25 AM00000050000001531 2015, 05:04:15
2

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

ответил Cody The Coder 25 AM00000050000001531 2015, 05:04:15
2

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

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

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

ответил Cody The Coder 25 AM00000050000001531 2015, 05:04:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132