Я действительно боролся с этим проектом. Таким образом, у меня есть «сетка», известная как 2D символ вектора. 79 символов в ширину, 20 символов в высоту. Я создал несколько функций, которые по существу рисуют пути от одного края сетки к другому. Эти «пути» являются несколько случайными … где у меня есть генератор случайных чисел, выбирающий int из 0-7 и использующий комбинацию путей, для которых я сделал функции. Итак … Есть несколько путей / линий, проходящих через сетку.
Следующая часть должна была поместить прямоугольники / квадраты по этим путям в сетке. После многих часов разочарования я получил программу для размещения этих прямоугольников по путям.
Эта следующая часть потеряла меня, и я не знаю, с чего начать. Теперь мне нужно определить, соединяют ли пути каким-либо образом все прямоугольники вместе, но только 1 или 2 пути могут соединяться с прямоугольником. Поэтому, если один из прямоугольников не касается пути, мне нужно вызвать функцию для восстановления новой сетки с путями и прямоугольниками.
Помимо возможности проверить, касается ли путь прямоугольника в 1 или 2 местах … Мне нужно удалить лишние символы пути. Поэтому, если путь не соединяется с другим прямоугольником или нужным путем, мне нужно удалить этот символ.
«#» — это пути и «.» прямоугольники
Вот пример того, что моя программа отображает сейчас:
# #
# #
........ # ##############
........ # # # ..........
........ # # ##..........############
........########### # # .......... #
###........########################### .......... #
........ # # .......... #
........ ################################# #
# # # #
# # # #
........ # # # #
........ # # ########################
........ # ####### # ........
........ # # # ........
############........## # # ........
........ ################## ........##################
........ ........
........ ........
Обратите внимание на дополнительные отметки «#» и почему некоторые из них бесполезны? Технически мне не нужно удалять, где пути разветвляются и заново соединяться с путем. Технически они могут касаться более чем в 1 месте, так как я буду добавлять границы к прямоугольникам … только с 1 или 2 точками, которые напрямую соединяют «#» с «.» (не волнуйтесь об этом прямо сейчас) Они просто не могут быть более чем на 1 ‘#’ толще и в соответствии с предыдущими требованиями. Вот как это должно выглядеть после того, как я каким-то образом пойму, как удалить те, которые мне не нужны:
........ ##############
........ # # ..........
........ # ##..........
........########### # ..........
........ ################# ..........
........ # # ..........
........ #################################
# # #
# # #
........ # # #
........ # # ####
........ # ####### # ........
........ # # # ........
........## # # ........
........ ################## ........
........ ........
........ ........
Самое близкое, что я получил, — это определить, в каком направлении идет путь от определенного места. Но я понятия не имею, как использовать это в моих методах удаления «#» или проверки на наличие островковых прямоугольников.
Пожалуйста, помогите мне 🙁 Я понятия не имею, как это сделать! Дайте мне знать, если вам нужно больше информации.
Это не совсем то, о чем вы просите, но я думаю, что это поможет вам, Какие идеальные алгоритмы для генерации 2D-подземелий в стиле Rogue?, Dungeon Generation и этот Алгоритм построения подземелий даже есть пример кода C ++. Также есть код для rouge-like
игры, которые должны делать то же самое.
Других решений пока нет …