Главная » Документация » Практическое руководство по AI

RSS

Практическое руководство по AI

AI

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

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

Перемещение


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

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

Патрулирование


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

Введение патрулирования ни на что не повлияет. Просто если объекты будут как-то перемещаться по карте, игра будет казаться живой и не будет докучать нетерпеливых пользователей.

Обход препятствий

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

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

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

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

Если возникает необходимость в более продвинутых алгоритмах поиска пути, попробуйте A*. Это довольно популярное решение для нахождения кратчайшего пути в лабиринтах. Есть варианты предпотчительнее A*, алгоритмы управления для постепенного прохождения через препятствия и для других жестко запрограммированых ситуации, таких как создание funneling intersections, которые можно использовать для того, чтобы добраться к отдельным областям карты.

Страницы : 1 2 3 4 5