Как построить поле направлений для волны врагов в tower defense
Если у десятков противников одна цель, не обязательно запускать A* отдельно для каждого. Поиск в ширину можно один раз начать от цели и распространить по всей сетке. Для каждой посещённой клетки алгоритм запоминает соседнюю клетку, из которой пришёл. Если идти по этим указателям обратно, получится кратчайший маршрут к цели.
Из тех же данных собирается поле направлений: в каждой клетке стрелка указывает туда, где расстояние до цели уменьшается. Новый или сдвинутый противник сразу получает готовое направление. Для сетки с разной стоимостью перемещения вместо поиска в ширину понадобится алгоритм Дейкстры.
В разборе Red Blob Games есть интерактивные визуализации фронта поиска, поля расстояний и стрелок, а также заметки по реализации на Python и C++.
Post #2067
841