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

RSS

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

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

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

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

Дискуссия и примеры будут относиться к стратегиям в реальном времени (Real-Time Stragedy), однако, некоторые концепции могут быть использованы для других типов игр. Примеры будут иллюстрироваться в формате языка Си.

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

Автоматы, конечные автоматы

Конечный автомат – это система, имеющая ограниченный набор состояний. Примеры из реального мира: люстра, которая может быть включена или выключена; будильник, который либо работает, показывая время, либо звенит, либо находится в режиме установки времени. Любая система, обладающая ограниченным набором возможностей, которые могут быть обозначены отдельными состояниями (или даже их комбинациями), может быть представлена конечным автоматом.

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

Использование конечных автоматов

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

Одни системы разрабатываются для того, чтобы наиболее точно, ‘правильно’ моделировать то, как человек думает и обучается. Вы можете упростить алгоритм, если продумаете некоторые реакции системы, взесив все факторы, и решите как она должна действовать в том или ином случае. Изучая самообучающиеся системы AI и системы принятия решений, всегда имейте это ввиду, поскольку очень часто лучшие используемые на практике алгоритмы – самые простые, а не самые, с научной точки зрения, точные.

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

Конечные автоматы в играх

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

В игре будут как минимум 2 вида конечных автоматов. Первый будет связан с интерфейсом игры. Он отвечает за то, находится ли игра в режиме паузы; если существует несколько экранов игрового поля, то какой виден в данный момент; какие предметы игрок может увидеть, а какие нет. Другие состояния или флаги вы можете использовать для конкретного интерфейса.

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

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

1
2
3
4
5
6
7
8
9
10
11
12
type
 
TGameLevelState = packed Record
  alert:integer; // Состояние 'тревоги' врагов
  Position:TPoint; // Место, где был произведен последний выстрел
  ShotTime:integer; // Время, в тактах игры, когда последний выстрел был произведен
  hostage:integer; // Освобожденный заложник
  explosives:integer; // Взрывчатки установлены или нет
  tank:integer; // Уничтоженный танк
  dialogue:integer; // Переменная, отвечающая за диалог
  complete:boolean; // Миссия завершена, или нет
end;

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