Добавлено: Пн Янв 04, 2010 16:20
Заголовок сообщения: Re: Бои с драконами
Это так задумано было или ИИ тупит?
Да и да. Цель ИИ - нанести максимальный количественный урон, поэтому он
обычно атакует самых уязвимых юнитов.
Как вариант улучшения алгоритма, можно ввести поправку на уровень юнита, чем выше уровень юнита, тем он более приоритетная цель.
Предложение, как считать приоритет:
Ценность_юнита = (цена_найма_в_золоте + цена_найма_в_кристаллах * 4) * (1.1 ^ уровень_юнита) * (1 + модификаторы_наград).
Для юнита-героя:
Ценность_юнита = (цена_воскрешения_в_золоте + цена_воскрешения_в_кристаллах * 4) * возможно_тут_нужен_кэф.
Приоритет_атаки_юнита = минимум(средний_урон_по_этому_юниту_с_учетом_брони / текущее_здоровье_этого_юнита, 1) * ценность_юнита.
Всё просто.
Второй вариант предложения (ценность_юнита считается как в первом):
Опасность_юнита_для_юнита_ии = минимум(средний_урон_по_этому_юниту_ии_с_учетом_брони / текущее_здоровье_этого_юнита_ии, 1) * ценность_юнита_ии.
Опасность_юнита_лечащего_юнита = (сколько_может_вылечить / общее_здоровье_раненого_юнита) * ценность_раненого_юнита.
Приоритет_атаки_юнита = минимум(средний_урон_по_этому_юниту_с_учетом_брони / текущее_здоровье_этого_юнита, 1) * максимум_по_всем_юнитам_кого_может_достать_следующим_ходом (опасность_юнита_для_юнита)
Пример: герой-лучник и куча мяса из варваров против дракона, считаем, кого атаковать дракону:
Если варвар с атакой 9 достанет только дракона с защитой 10, его средний урон около 0.5, при этом атака убьет варвара:
приоритет_атаки(варвар) = 1 * (0.5 / здоровье_дракона) * ценность_дракона.
Герой-лучник с бронебойной дист. атакой 13 нанесет дракону 8 урона, а дракон ранит на 30 хп из 50.
приоритет_атаки(герой) = (30 / 50) * (8 / здоровье_дракона) * ценность_дракона.
Получается, что герой - значительно более приоритетная цель.
Необходимо отдельно учитывать магию, то есть опасность мага это не только выстрел жезла. Можно вычислять итоговый приоритет как сумму предложенных двух. Можно дополнительно учесть ответку с минусом. Можно учесть урон выносливости. Можно просчитывать на несколько ходов вперед. Дополнять можно бесконечно.