Алгоритм построения маршрута отряда от точки A до точки B
0.1. Делаем скриншот поля боя (сетка, снег) с минимальным количеством препятствий и отрядов (без боевых машин).
0.2. Распечатываем на принтере, берём в руки карандаш и стёрку, рисуем всевозможные препятствия, а также выбираем пункт A и пункт B.
Этап первый.
1. Гекс A получает метку 0.
2. Все соседние свободные гексы получают метку 1.
3. Продолжаем нумеровать гексы, пока гекс B не получит свою метку (метка - это расстояние гекса от гекса A).
Этап второй.
Пусть, например, гекс B получил метку 9.
4. Среди гексов соседних с гексом B (пункт назначения) выбираем те, которые имею метку 8.
5. Среди выбранных гексов нас будет интересовать гекс с наивысшим приоритетом:
--4--3--
-5----2-
--6--1--
Например, если верхний правый и нижний правый гекс имеют метку 8, то выбираем нижний гекс, так как он имеет высший приоритет 1 (а верхний правый только 3).
Найденный гекс будет предпоследним в маршруте A-B.
6. Теперь ищем гексы, соседние с найденным и имеющие метку 7 и т.д.
7. Повторяем описанную процедуру, пока не достигнем гекса с меткой 0.
Маршрут построен.
Для существ, занимающих два гекса, маршрут строится аналогично (при построении игнорируем тот факт, что отряд может разворачиваться). Гекс слева (для нападающего)/справа (для защищающегося) от "головы" существа получает метку "1". Только гексы, куда не может попасть "голова" отряда (из-за того, что не помещается "хвост"), помечаются, например, меткой "N".
Узнать, развернётся ли существо перед атакой, можно по разности dest - source, где dest - расстояние до пункта назначения в гексах от левого края поля битвы (правого, если Вы защищающийся), а source - соответствующее расстояние до исходного гекса. Если эта разность отрицательна, то отряд развернётся, иначе - нет.
P. S. Если гекс может получить несколько меток, то среди них выбираем наименьшую:
5 * 7 (Здесь гекс "*" получает метку "6", а не "8").