Я сортирую кластера врагов по приоритетам, приоритет определяется как размер кластера + близость к рабочим + атака по базам своим + присутствие чужой базы итд но у меня это никак не налажена, там надо параметры подтюнить. Сейчас например без тумана мои сразу бегут бить чужие базы и не успевают вернуться пока другие бьют мою базу ))
Для армий у меня осталась тестовая схема со второго раунда.
Для левого и правого флангов считается сколько нужно солдат для защиты рабочих (опасные враги+2), сколько для нападения (опасные враги дальше моих рабочих*1.2). Смотрится сколько есть свободных солдат. Как хватит на нападение - отправляется "армия" по флангу. Если солдат в армии станет слишком много - они перемещаются в свободные и там перераспределяются). Фланг выбирается исходя из "ценности" нападения - наличия "вкусных" целей. И так пока и осталось нападение на ближайшего на фланге. Разделении армии на несколько в случае раскола армии противника чтобы за малыми группами гонялись не все осталось в планах.
Ну и дополнительно несколько "армий", которые охотятся на рабочих - по bfs идут к ближайшему рабочему избегая опасные зоны. Работает не всегда из-за перемещения вражеских армий. и иллюзии охотников, что могут "протиснутся" между солдатами врага, которые стоят на расстоянии >15 клеток друг от друга.
В зоне принятия решения (дальность атаки врага+1, +1, если может походить в эту сторону. Для вражеского лучника в чистом поле будет зона на 7 клеток вокруг него. Это зона в которой пора думать куда ходить, иначе есть шанс, что в следующем ходу будет драка) начинаются расчёты битвы.
Сейчас это несколько кривая симуляция, в которой от солдата, который мог бы на следующем ходу напасть (условно дальность 6) считается, что будет если он нападёт на кого-то. Если враг (тот кто сможет стрелять в нас) останется жив, то в данную локальную битву пробуем подключить ещё бойца, который атакует этого врага и так пока не кончатся либо враги в очереди, либо свои, которые смогут в них стрелять. Обычно получаются групки по 2-4 бойца. Иногда больше. Получаем условный результат этого локального боя. Если он нам нравится, то идём. Если нет, то стоим на месте или отсутпаем (зависит от солдат которые не факт, что смогут напасть - условно дальность 7). Берём следующую локальную битву, которая точно не связана с текущей в рамках хода.
Из минусов - не перебираются все варианты нападения для всех солдат, а берётся только предположительно наилучшее. Критично - враги стоят ))) Не считается их наиболее вероятная следующая позиция.