Как предотвратить блокировку пути?

0

Я пытаюсь построить алгоритм, который предотвращает "блокирование пути". Я рисую случайные итемы и печатаю их на карте: Изображение 174551Изображение 174551 [...] Изображение 174551

"X" - это игрок. Он может перемещаться по этой карте, но не может оставаться в поле "#". После рисования путь блокируется ("x" не может перемещаться, например ", (3,2):

Изображение 174551

У кого-то есть идея, концепция или материал, как написать алгоритм, который предотвращает рисование "#", когда он блокирует путь?

Вот фрагмент моего кода:

void build_dungeon(MAP_GRID& map, int chance, string object)
{
    int i, j;
    for (i = 0; i < g_map_size; i++){
        for (j = 0; j < g_map_size; j++){
            if (rand() % 100 >= (100 - chance) && map[i][j] == "[ ]" && anti_stuck(map, i, j)){
                map[i][j] = object;
                print_map(map);
            }
        }
    }
}

Я пытаюсь написать функцию anti_stuck.

  • 1
    Почему ваш код рисования является частью алгоритма? Я бы просто ожидал двухмерный массив int, где каждая точка в массиве обозначает определенное состояние. Вы хотите рисовать и вычислять одновременно, это неправильный подход.
  • 0
    Если пишешь про print_map (map) - я ставлю его только для отладки.
Показать ещё 1 комментарий
Теги:

1 ответ

4
Лучший ответ

Вы можете выполнить заливку заливки, чтобы определить, какие квадраты достижимы из заданного начального местоположения. Смотрите эту анимацию из статьи в Википедии:

Изображение 174551

Кроме того, если вы хотите определить, можете ли вы достичь одного квадрата от другого, используйте алгоритм поиска пути, такой как A *. Опять же, анимация из Википедии:

Изображение 174551

  • 0
    Любое предложение, которое может быть лучше? От чего это зависит?
  • 1
    Заполнение наводнения даст вам списки доступных и недоступных квадратов. Поиск по поиску пути просто скажет вам, можете ли вы добраться от A до B. Он не скажет вам ничего о C, D или E.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню