Что такое хороший алгоритм поиска путей на основе 2D-сетки?

В настоящее время я пишу 2D-игру в Javascript, используя HTML5 <canvas> элемент. Это идет очень хорошо, но я столкнулся с проблемой.

Дизайн уровня для моей игры - сетка (поэтому стоимость пути, перемещающаяся из одной ячейки в ячейку север/юг/восток/запад, равна 1) с различными препятствиями, занимающими различные местоположения в сетке; очень похоже на лабиринт, но с гораздо большим количеством комнаты для маневра. Каждый индивидуальный уровень составляет порядка 400 и раз; 200 клеток.

Я пытаюсь внедрить врага, который будет искать игрока независимо от того, где он может быть, но у меня возникли проблемы с попыткой перевести один из различных алгоритмов поиска пути в соответствии с моей ситуацией. Большинство из тех, с которыми я сталкивался (например, A * и Dijkstra), по-видимому, лучше всего подходят для 3D или более сложных 2D-ситуаций. Мне было интересно, можно ли значительно упростить эти алгоритмы, чтобы лучше соответствовать моим целям, или если что-то вроде поиска по глубине будет более эффективной альтернативой, учитывая размер уровня.

Ответ 1

A * - очень распространенный алгоритм 2D-поиска пути. Может потребоваться немного времени, чтобы обернуть голову вокруг того, что происходит, если обнаружение пути незнакомо, но это не очень сложно. Вы можете просто взглянуть на код примера, который был разработан для более сложного приложения, чем вы планируете. Там хороший учебник для понимания алгоритма здесь.

Ответ 3

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