Попробуем проанализировать интеллект поведения юнитов. Используется некоторый алгоритм поиска пути на плоскости с весом. Поиск происходит в циклах, во время которых юниты смещаются в клетку с меньшим, для определенности, весом. На кажом шаге, для каждого юнита рассчитывается есть ли для него такая клетка, она должна быть не занята для возможности перемещения. Веса рассчитываются до некоторой опорной точки у донжона. Сам донжон соответственно весит очень много, чтоб юниты не могли находиться в его клетках (кроме понятно сердцевины), ни при каких обстоятельствах.
Чтобы юнит переместился в некоторую клетку, она должна иметь вес меньший веса всех ее соседей. Дополнительно при построении матрицы весов нужно учитывать веса зданий, юнитов а также свободного пространства.
Логично проводить построение от опорной точки донжона к краям. Задавая ей некоторый вес, рассчитываем все остальные клетки по принципу: общий вес клетки = наименьший вес ее соседей + вес части здания-юнита-пустого простанства этой клетки (такой вес назовем дополнительным). При программировании логично иметь матрицу весов замковых построек для удобства. Вес пустой клетки нужен, например, для инициации перемещения за пределами замка.
Дополнительные веса, вероятно, берутся в зависимости от показателя прочности (сколько ударов выдерживает объект против мечника-пикинера и тд) или в таком-же соотношении. Вес пустой клетки допустим 1. Пустые клетки в и снаружи замка по логике имеют одинаковый вес. Башня, из-за неразрушимости обычными войсками, должна иметь значительный вес, например, превосходить максимум из любых разрушимых объектов на всей карте. Все клетки башни равны, для любого типа башен, так как дополнительную разницу вводить не логично. Соответственно вес башни состоит из веса всех ее клеток, и пожалуй все клетки стоит брать целочисленными. Минимальная башня — 2 на 2 итого на 4 клетки должен приходится такой значительный вес.
Общая карта весов обновляется при передвижении юнитов, разрушении ими структур и при разрушении структур баллистами.
Особенности поиска пути:
В левом верхнем углу в игре происходит особенно выраженное запаздывание юнитов при передвижении к донжону, отмеченные в руководстве по нападению ряды. В других углах такого не наблюдается. По-видимому, поиск идет сверху вниз, тоесть промежуток из-за этого и образуется, ибо в первый цикл смещается только нижняя линия, верхние блочатся как раз ей и предыдущими. Отсюда предпологаем что центр координат для циклов пересчета находится на верхней горизонтальной прямой для типовой схеме типа этой: (или на схеме ниже на линии Х.)
Посмотрим некоторое поведение юнитов:
Здесь видно позицию юнита приходящего первым среди остальных, размещенных вертикальным рядом и идущих на пустой замок без зданий и противодействия кониной. Также логично предположить что вторая координата У, классически находится слева, тобишь центр координат в левом верхнем углу, уточним это в дальнейшем.
видно приоритет У координаты. Юнит отмеченный красной точкой избирает путь отмеченный синим вначале инициируя диагональное перемещения и меняя координату У.
Посмотрим на следующие изображения:
Здесь мы убеждаемся в действительности что рассчет по X происходит слева направо и координатная прямая У действительно слева. Если бы первым передвигался юнит у границы, то последующий юнит передвигался бы тоже прямо а не ходил в обход.
На схеме ярко красным обозначен первый юнит, точка его перемещения синяя. Красным и светлосиним остальные юниты и их перемещение по диагонали.
Итого имеем следующую иллюстрацию для поля с произвольным замком: