Как мне удалить части контуров в 2D векторной сетке?

Я действительно боролся с этим проектом. Таким образом, у меня есть «сетка», известная как 2D символ вектора. 79 символов в ширину, 20 символов в высоту. Я создал несколько функций, которые по существу рисуют пути от одного края сетки к другому. Эти «пути» являются несколько случайными … где у меня есть генератор случайных чисел, выбирающий int из 0-7 и использующий комбинацию путей, для которых я сделал функции. Итак … Есть несколько путей / линий, проходящих через сетку.

Следующая часть должна была поместить прямоугольники / квадраты по этим путям в сетке. После многих часов разочарования я получил программу для размещения этих прямоугольников по путям.

Эта следующая часть потеряла меня, и я не знаю, с чего начать. Теперь мне нужно определить, соединяют ли пути каким-либо образом все прямоугольники вместе, но только 1 или 2 пути могут соединяться с прямоугольником. Поэтому, если один из прямоугольников не касается пути, мне нужно вызвать функцию для восстановления новой сетки с путями и прямоугольниками.

Помимо возможности проверить, касается ли путь прямоугольника в 1 или 2 местах … Мне нужно удалить лишние символы пути. Поэтому, если путь не соединяется с другим прямоугольником или нужным путем, мне нужно удалить этот символ.

«#» — это пути и «.» прямоугольники
Вот пример того, что моя программа отображает сейчас:

        #                  #
#                  #
........                #         ##############
........                #         #            # ..........
........                #         #            ##..........############
........###########     #         #              ..........           #
###........###########################              ..........           #
........          #     #                        ..........           #
........          #################################                   #
#     #                         #                   #
#     #                         #                   #
........ #     #                         #                   #
........ #     #                      ########################
........ #     #######                #  ........
........ #           #                #  ........
############........##           #                #  ........
........             ##################  ........##################
........                                 ........
........                                 ........

Обратите внимание на дополнительные отметки «#» и почему некоторые из них бесполезны? Технически мне не нужно удалять, где пути разветвляются и заново соединяться с путем. Технически они могут касаться более чем в 1 месте, так как я буду добавлять границы к прямоугольникам … только с 1 или 2 точками, которые напрямую соединяют «#» с «.» (не волнуйтесь об этом прямо сейчас) Они просто не могут быть более чем на 1 ‘#’ толще и в соответствии с предыдущими требованиями. Вот как это должно выглядеть после того, как я каким-то образом пойму, как удалить те, которые мне не нужны:

 ........                          ##############
........                          #            # ..........
........                          #            ##..........
........###########               #              ..........
........          #################              ..........
........          #     #                        ..........
........          #################################
#     #                         #
#     #                         #
........ #     #                         #
........ #     #                      ####
........ #     #######                #  ........
........ #           #                #  ........
........##           #                #  ........
........             ##################  ........
........                                 ........
........                                 ........

Самое близкое, что я получил, — это определить, в каком направлении идет путь от определенного места. Но я понятия не имею, как использовать это в моих методах удаления «#» или проверки на наличие островковых прямоугольников.

Пожалуйста, помогите мне 🙁 Я понятия не имею, как это сделать! Дайте мне знать, если вам нужно больше информации.

0

Решение

Это не совсем то, о чем вы просите, но я думаю, что это поможет вам, Какие идеальные алгоритмы для генерации 2D-подземелий в стиле Rogue?, Dungeon Generation и этот Алгоритм построения подземелий даже есть пример кода C ++. Также есть код для rouge-like игры, которые должны делать то же самое.

2

Другие решения

Других решений пока нет …