Один из подходов, которые я использовал, состоит в создании двухпроходной системы.
Сначала выясните, куда может направиться ваше подразделение.Используйте A * или что-то еще, чтобы отметить местность, чтобы увидеть, как далеко отряд может двигаться в этом ходу.
Как только вы это знаете, переберите свою доступную тактику (рукопашная атака, лечите дружественного отряда, что угодно) и назначьтефитнес-функция для всех доступных применений тактики.Если вы пройдете по помеченной местности, вы сможете очень быстро определить, какое у вас пространство возможных тактик.
Это дает вам список доступных тактик и их функций пригодности для каждого хода.Выберите лучший или рандомизируйте сверху.Если нет никакой доступной тактики, повторите процесс с пометкой местности в течение двух ходов и т. Д.
Что я имею в виду под функцией фитнеса, так это принять решение о «ценности» выполнения тактики наопределенная единица или местоположение.Например, ваша фаза тактического решения «исцелить дружественный отряд» может пройти все дружественные отряды.Если дружественный отряд находится в пределах досягаемости (т. Е. Доступен из местоположения, в котором он может дойти), добавьте его в список возможных тактик и присвойте ему рейтинг пригодности, скажем, 100 * (1,0 - здоровье отряда), гдездоровье юнита колеблется от 0 до 1. Таким образом, исцеление персонажа, у которого осталось только 10% здоровья, будет стоить 90 очков, в то время как юнит, уронивший всего 5%, будет стоить только 5, и юнит даже не будет рассматривать исцеление без повреждений.Блок.Специальным юнитам (т. Е. Сценариям «защитить босса», необходимым для сохранения условий победы) может быть присвоено более высокое базовое число, чтобы им было уделено больше внимания дружественными юнитами.
Аналогично, ваша «атака ближнего боя»Фаза принятия решения будет проходить через все достижимые вражеские юниты, рассчитывать вероятный урон и сравнивать его со здоровьем юнита.Присвойте каждому юниту «желательность» для атаки и умножьте его на процент оставшегося здоровья, который вы, вероятно, получите, и у вас есть довольно подробная функция фитнеса, которая поддерживает удаление юнитов, когда вы можете, но все еще идет после высокой стоимостицели.
Используя такой процесс, вы получите список параметров, таких как «Переместить в локацию A и вылечить дружественное подразделение B: 50 очков», «Переместиться в локацию C и атаковать вражеское подразделение D: 15».точки »и т. д. Внезапно выбрать тактику очень просто.
Дополнительные детали можно добавить, умножив пригодность тактики на соответствие пути, который вам нужно будет использовать для ее реализации.Например, если место, куда вы должны были бы переместиться, чтобы исцелить дружественный отряд, подвергает вас серьезной опасности (т. Е. Стоит на лавовом пространстве или чем-то еще), вы можете учесть это, умножив пригодность этой тактики на.2 или около того, чтобы устройство все еще могло это учитывать, но только если это действительно важно.Все, что для этого нужно - это написать алгоритм для оценки пригодности данного местоположения, и он может быть таким же простым, как предварительно вычисленное число «желательности местности», или таким же сложным, как ведение «карт угроз» вражеских подразделений.
Самая сложная часть, конечно, найти правильные меры, чтобы сделать двигатель умным.Но это забавная часть вашей системы для настройки.