Представьте себе очень простую игру, которую мы все знаем:
Ты игрок (зеленый). Ваше движение ограничено X
осью. Наш враг (или враги) находится вверху экрана, его движение также ограничено X
осью. Игрок стреляет пулями (желтым цветом) по врагу.
Я хотел бы реализовать ИИ для врага, который должен быть действительно хорош в том, чтобы избегать пуль игроков. Моей первой идеей было разделить экран на отдельные части и присвоить им весовые коэффициенты:
Существует два веса: «вес пули» (серый) - это опасность, создаваемая пулей. Чем ближе пуля к врагу, тем выше «вес пули» ( 0..1
где 1 - самая большая опасность). Дорожки без пули имеют вес 0. Второй вес - это «дистанционный вес» (салатовый). Для каждой полосы я добавляю 0.2
стоимость движения (это значение теперь произвольно и может быть изменено).
Затем я просто добавляю веса (белый цвет) и иду на полосу с наименьшим весом (красный цвет). Но у этого подхода есть очевидный недостаток, поскольку он может легко пропустить локальные минимумы, поскольку оптимальное место для перехода будет просто между двумя входящими пулями (как обозначено белой стрелкой).
Итак, вот что я ищу:
- Нужно найти выход сквозь пулевую бурю, даже когда нет места, которое не навязывает угрозу пули.
- Враг может надежно уклоняться от пуль, выбирая оптимальное (или почти оптимальное) решение.
- Алгоритм должен учитывать скорость движения пуль (так как они могут двигаться с разными скоростями).
- Способы настройки алгоритма, чтобы можно было применять различные уровни сложности (немой для сверхразумных врагов).
- Алгоритм должен позволять разные цели, так как противник не только хочет уклоняться от пуль, но и уметь стрелять в игрока. Это означает, что позиции, где противник может стрелять в игрока, должны быть предпочтительными при уклонении от пуль.
Так как бы вы занялись этим? В отличие от других игр этого жанра, я хотел бы иметь только несколько, но очень «умелых» врагов вместо массы тупых врагов.