Мне нужны подсказки для создания рогальных "подземелий",

Предполагается, что он "случайно" генерирует туннели в сетке 79x20, которая содержит несколько "комнат". Я создал несколько функций, которые по сути делают один туннель. Я создал функцию, которая произвольно выбирает число и в зависимости от этого числа, создает сеть туннелей, вызывая смесь этих функций, которые создают один путь.

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

Детали:

Требования также используют mt() для создания "комнат" в сетке 79x20. В каждой комнате должно быть не менее 16 "плиток" (отмечено как "."). Каждое подземелье должно генерироваться случайным образом. Каждый уровень подземелий должен содержать не менее 200 комнат. Эта часть заняла у меня несколько часов, но я, похоже, не слишком сильно сражался. Я устанавливал функции, чтобы разделить сетку на 4 секции, а затем случайным образом помещал "комнаты" по меньшей мере из 16 плиток в каждом разделе. Затем я сделал функцию, чтобы пройти через вектор 2D-символа и подсчитать '.' символы. Если он меньше 200, я вызываю еще одну функцию, которая очищает всю сетку и регенерирует туннели/комнаты.

-7
источник поделиться
1 ответ

Прежде всего - поднимитесь! Вся суть жизни заключается в том, чтобы делать ошибки, потому что вы не можете узнать, не испытываете ли вы то, что не срабатывает из первых рук. Когда я начинал сочинять музыку, я понятия не имел, что делать, мне пришлось делать все, что НЕ РАБОТАЕТ, прежде чем я смогу добраться где угодно. :)

Что еще более важно, все в порядке, чтобы сосать вещи. Мы все делаем вещи, которые сосут. Когда вы столкнулись с тем, что сделали что-то, что отстой, выяснить, что вы сделали неправильно, чтобы вы знали в будущем, что делать лучше. Все мои старые песни ужасны, это не значит, что я ужасен, на самом деле, совсем наоборот - он кладет кирпичи на путь моего личного прогресса. Если я не сделаю то, что сосут, я застрял - я ничего не смогу сделать, и поэтому я не поправляюсь!


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

Например, у Brogue есть простой алгоритм генерации подземелья, который работает достаточно хорошо:

http://brogue.wikia.com/wiki/Level_Generation#Digging_the_Level

В принципе, вы начинаете с комнаты, выбираете случайные края комнат/коридоров и пытаетесь создать коридор, заканчивающийся в новой комнате в этом направлении, отказываясь и пробуя новое случайное место, если оно что-то перекрывает. Он пробует достаточно времени, чтобы уровень, как правило, был плотно упакован комнатами и коридорами. Тем не менее, этот проект генерирует древовидную структуру без петель, поэтому она добавляет дополнительные коридоры для обеспечения замкнутости.

Исходный код Brogue доступен здесь:

https://sites.google.com/site/broguegame/

(Однако обратите внимание, что генератор уровня изменился в 1.7.2, поэтому я думаю, что вики устарели)

У Roguebasin также есть много и много статей, которые дают советы по программированию для жестких частей roguelikes:

http://www.roguebasin.roguelikedevelopment.org/index.php?title=Dungeon-Building_Algorithm

+3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос