Алгоритм искусственного полета игры AI? - PullRequest
6 голосов
/ 04 октября 2010

Приветствую всех,

Я нахожусь в стадии разработки одного из моих хобби-проектов. Я собираюсь разработать трехмерную игру воздушного боя.(вдохновленный HAWX).Но мне интересно, как ИИ работает на вражеские поделки?Я думаю, они не двигаются по пути (поиск пути на графике), как в играх FPS.Какие алгоритмы я могу использовать для движения противника?Могу ли я использовать для этого какие-либо AI-библиотеки?

Примечание: я использую движок irrlicht, C ++ в качестве среды разработки.

1 Ответ

5 голосов
/ 04 октября 2010

Простой ответ для поиска точки перехвата ...

В любой момент времени сделайте прямолинейное предположение. Вы и ваша цель путешествуете по прямой линии с фиксированной скоростью. Следовательно, вы можете вычитать свое положение и движение из целей и работать с относительным положением и скоростью целей.

Интересный момент времени - это когда ваша цель находится настолько близко (на этой линии), насколько это когда-либо будет, - ближайшая точка на этой линии. IIRC, которое можно рассчитать с помощью векторных точек ...

      P . V
t = - -----
      V . V

Предполагая, что я правильно понял, в этот момент траектория цели находится под прямым углом к ​​линии от вас до цели (НЕ совпадает с углом между ее и вашими движениями). Вы можете получить эквивалентный ответ, используя тригонометрию (точечный продукт связан с косинусом), и я даже разработал его (не зная лучше), используя метод одновременных уравнений один раз, для 2D-игры, которую я начал, но никогда не заканчивал много лет назад (подумайте о битве между кораблями типа «вращение-и-тяга» типа oids / тяги с гравитацией).

Исходя из этого, вы можете определить, где находится эта ближайшая точка и насколько она далеко.

Рассчитайте это время для небольших изменений текущей скорости и направления, и вы сможете многократно оптимизировать перехват в ближайшем будущем. Конечно, минимизация t приводит к тому, что t может уйти в прошлое - убежать! Может быть, лучше было бы минимизировать t в квадрате, но тогда у вас есть другие сложности - если враг стоит прямо за вами, вы действительно хотите замедлить ход?

Во всяком случае, этого, вероятно, достаточно для простой управляемой ракеты, но, конечно, очень мало пользы в воздушном бою. Мое впечатление об этом больше похоже на аналоговые шахматы в реальном времени, где большую часть времени вы не видите большую часть доски. Вы не можете минимизировать это, очевидно, поэтому вам нужна модель более высокого уровня того, что движется, чем просто джойстик и другие настройки управления. Для этого потребуется немало исследований тактики, основанной на человеческом опыте, прежде чем вы начнете разрабатывать для нее механизм ИИ.

Однако для использования укрытия на местности вы, вероятно, можете сделать что-то гораздо более простое. Трассоискатель, основанный на графике, вполне может иметь отношение к прокладке маршрута через долины. Сделайте большую часть поиска пути в 2D и настройте карту относительно плавных вариаций, чтобы убедиться, что вы не полетите прямо в скалу.

Вероятно, вам нужна система различных типов целей и тактик с возможностью взвешивания и выбора между ними. Вдали от вашей цели, у вас больше шансов попытаться остаться в укрытии, чем когда вы приблизитесь. Когда у вас есть ракета на хвосте, она будет иметь приоритет перед любыми наступательными действиями, которые вы можете предпринять, и т. Д.

Кстати - все это не из реального опыта разработки игр (и я, конечно, никогда не был пилотом какого-либо описания), так что относитесь к нему с расплывчатыми предположениями, которые могут не сработать. И будьте осторожны - одна из причин, по которой моя 2D-игра так и не была закончена, заключалась в том, что попытка разработать код ИИ была сначала настолько интересной, а потом настолько разочаровывающей - это так раздражает, когда единственный способ, которым ваша лучшая попытка ИИ может победить вас, имея в разы больше кораблей и бесконечный запас патронов.

...