Библиотека алгоритмов искусственного интеллекта для игр. Часть 1. (исходники)

Источник: gennadich
Курдаков Сергей Александрович

Мы надеемся, что статьи будут интересны любым программистам и дизайнерам, интересующимся разработкой игр.

Мы будем благодарны предложениям и пожеланиям по публикуемым статьям и темам. Обсудить статью можно будет на нашем форуме.

 
 

Курдаков Сергей Александрович

Закончил Московский авиационный институт им. Серго Орджоникидзе в 1994 по специальности инженер системотехник по динамике полета космических аппаратов. Разработкой игр начал заниматься в компании Eagle Dynamics в 1998 году. С марта 2001 года в течении трех лет работал в VRtainment Gmbh. Специализировавшейся на разработке промышленных симуляторов, созданные программы сейчас используются в Driving Simulator at Fraunhofer Institut for Verkehrs- und Infrastruktursysteme in Dresden.
Автор программы захвата видео CapturePad. В свободное время создал и возглавлял команду из 10 удаленно работающих сотрудников. В 2005 году работал в норвежской фирме Kongsberg Maritime как исследователь разработчик графических алгоритмов. С конца 2005 года работает в GT на должности "Программист Искуственного Интелекта".

 
 
В процессе создания игр разработчик AI сталкивается с разными нетривиальными проблемами. Как правило, ответы не лежат на поверхности. Для выбора наиболее подходящего способа решения проблемы нужно знать специфику множества алгоритмов, применяемых для реализации искусственного интеллекта. Иногда, столкнувшись со сложной задачей, программист пытается решить ее силовым методом, через известные приемы, например, до бесконечности расширяя конечные автоматы, и тем самым добивается желаемого геймплея. При таком подходе уходит много сил и полученное поведение персонажей или объектов не всегда отличается элегантностью и естественностью. Решение можно искать и путем прочтения большого количества книг по искусственному интеллекту. Однако, даже будучи прочитанной, сухая теория не всегда приходит на помощь. Да и сам подход чтения всего подряд не удобен, особенно в ситуации жестких временных графиков: большинство прочитанного не имеет отношения к стоящим проблемам или новые идеи, возникающие при чтении, первоначально показавшись многообещающими, после мучительного процесса их воплощения, дают неудовлетворительный результат.

Оценить степень пригодности алгоритмов можно было бы на примерах их реализации в играх. Вообще, многие программисты считают, что учиться тем или иным приемам программирования лучше всего на основе работающего кода. Однако, хороших демонстрационных примеров реализации алгоритмов AI довольно немного. Для целей обучения и экспериментов, хотелось бы представить библиотеку FEAR [http://fear.sourceforge.net/] (Flexible Embodied Animat aRchitecture - библиотека настраиваемой архитектуры материализованных анимированных персонажей) (к сожалению, сайт библиотеки последнее время выдает ошибку), версия 0.4 которой вышла в начале 2005. Эта библиотека дает возможность изучать большинство существующих подходов искусственного интеллекта через реализацию поведения ботов для игры Quake 2. В версии 0.4, FEAR, наконец, стала по настоящему стабильной. Помимо улучшения модульности и устойчивости ядра, непосредственно реализующего алгоритмы AI, добавлено, по сравнению с предыдущими версиями, большое количество примеров. Примеры включают показ того, как реализуется реактивное поведение, как применять конечные автоматы, нейронные сети, генетические алгоритмы, деревья решения и даже демонстрируется реализация эмоций ботов на базе многоуровневых конечных автоматов. Иначе говоря, раскрыты практически все аспекты AI, встречающиеся в практике разработки игр.

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

В статье описываются шаги, которые необходимы для начала полноценной работы с библиотекой с использованием среды Visual Studio 8.0, однако описание позволит ускорить начало работы и для пользователей, имеющих версии Visual Studio 7.0 и 7.1.

FEAR можно использовать и с другими компиляторами. Желающие смогут разобраться с альтернативами, воспользовавшись документацией к библиотеке и системой построения проектов SCONS [http://www.scons.org/], для которой в инсталляцию библиотеки включены соответствующие скрипты.

Немного истории разработки FEAR.

Первоначально библиотека была разработана как демонстрационный код к книге AI Game Development: Synthetic Creatures with Learning and Reactive Behaviors Алексом Чампандардом [Alex J. Champandard]. Данную книгу отличал широкий охват тем и раскрытие большого количества идей, относящихся к программированию искусственного интеллекта для игр. К сожалению, из-за несколько сыроватого кода самой библиотеки, нестыковок примеров с текстом, многие читатели жаловались на большие сложности использования книги как учебного пособия. Однако к чести автора, он продолжил работу над библиотекой и сделал ее куда более устойчивой, структурированной и теперь пользоваться FEAR доставляет одно удовольствие.

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

Помимо книги, Алекс опубликовал ряд статей демонстрирующих использование FEAR, которые можно найти на сайте http://aigamedev.com/.

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

Установка

Для работы FEAR необходимы Python и Boost , если они отсутствуют на вашем рабочем компьютере, их необходимо установить в такой последовательности - Python, затем Boost.

Установка Python

Скачать самую свежую на момент написания статьи версию 2.4.3 Python можно c нашего сайта или официального сайта http://www.python.org/. После инсталляции для корректной работы Python необходимо установить некоторые переменные среды. Для FEAR достаточно установить следующие переменные среды:
PYTHON_ROOT - равным строке пути к каталогу с установленным Python, например D:Python24 ;
PYTHON_LIB_PATH - равным строке пути указывающем на подкаталог Libs, находящемся в каталоге установки Python, например D:Python24Libs ;
PYTHON_VERSION - для версии 2.4.3 значение равно 2.4

Разъяснение других (опционных) переменных среды, можно поглядеть на странице boost, посвященной Python http://www.boost.org/libs/python/doc/building.html.

Установка переменных среды возможна через меню "Панель управления (Control Panel) > Система (System) > Дополнительно (Advanced) > Переменные среды (Environment Variables)" путем создания переменных (New) и присвоения имени и значения.


Рисунок 1

После установки Python и переменных среды, можно переходить к установке Boost. Если вы сделали переменную среды пользовательской (User variable) перед переходом к следующему шагу следует перезагрузить систему, если вы установили переменные среды системными (System variable), можно не перезагружаться, но я рекомендую запустить 'set' в командной строке - по этой команде будут выведены все текущие переменные среды и можно убедиться, что требуемые переменные среды установлены. Также, если вы выполняли установку с запущенной средой разработки - то следует перезагрузить (закрыть и вновь запустить) среду разработки.

Установка Boost

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

Возьмите исходники boost c нашего сайта или с официального сайта Boost http://sourceforge.net/project/showfiles.php?group_id=7586 (далее подразумевается версия 1.33.1 boost)

После разархивации кода, его необходимо скомпилировать, для компиляции boost необходима специальная утилита bjam, которую можно скачать с нашего сайта или по этому адресу: http://prdownloads.sourceforge.net/boost/boost-jam-3.1.12-1-ntx86.zip?download.

Скопируйте содержащийся в архиве по ссылке файл bjam.exe в директорию boost или в любой путь, указанный в Path.

Для успешной компиляции boost обычно достаточно тех переменных, которые устанавливаться в файле vsvars32.bat из поставки visual С++ (поищите этот файл в директории установки Visual Studio, если никогда раньше не пользовались им. Для Ваших специфических нужд можно отредактировать этот файл). Запустите VisualStudio command prompt ( в случае ,если есть такой пункт в подменю Tools в панеле запуска Visual Studio ) или запустите через Start > Run (Пуск > Выполнить) команду
%ComSpec% /k "drive:PathToYourVisualStudioInstallationCommon7Toolsvsvars32.bat"
или, что тоже самое,
cmd /k "drive:PathToYourVisualStudioInstallationCommon7Toolsvsvars32.bat"
(замените drive:PathToYourVisualStudioInstallation на ваш путь к Visual Studio),

затем, в командном окне перейдите в директорию с исходниками boost и, далее, запустите на выполнение строку

bjam "-sTOOLS=vc-8_0" install

или

bjam vc-8_0 install

где параметр vc-8_0 указывает bjam, какой компилятор будет использоваться. Значение этого параметра для разных компиляторов - вы можете узнать в документации boost.

После завершения процесса компиляции скомпилированные библиотеки и заголовочные файлы по умолчанию будут помещены в C:/Boost.

Если вас не устраивает местоположение библиотек и заголовочных файлов по умолчанию, используйте параметр --prefix, тогда команда компиляции для VC8.0 будет выглядеть так:

bjam "-sTOOLS=vc-8_0" --prefix=PREFIXPATH install

где PREFIXPATH будет желаемым путем инсталляции.

Файлы справки Boost, которые можно найти в комплекте поставки или на официальном сайте, помогут разобраться с любыми возникшими вопросами. Так же могут быть полезны статьи в интернете, например http://www.boost.org/more/getting_started.html и http://www.codeproject.com/tips/Building_boost_libraries.asp.

После установки boost, на забудьте добавить путь к динамическим библиотекам (dll) boost в переменную среды Path, воспользовавшись панелью управления (Control Panel).


Рисунок 2

Также, добавьте пути к заголовочным и библиотечным файлам Python и Boost в Visual Studio в меню:

Tools/Options/Projects/VC++ Directories/Include files

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

Добавьте пути к файлам библиотек:

Tools/Options/Projects/VC++ Directories/Library files


Рисунок 3

Можно установить пути по-другому, а именно в (Project)/Properties/C++/General/Additional Include Directories и (Project)/Properties/Linker/General/Additional Library Directories. Правда, в этом случае пути будут доступны лишь в текущем проекте. Также, иногда удобно при указании путей использовать установленные переменные среды, например, один из вариантов указания пути для Python может выглядеть так $(PYTHON_ROOT)/include.

Наконец, шаг установки сопутствующих библиотек завершен.

Установка игры

Для работы FEAR - необходимо установить Quake 2.

В случае отсутствия CD с игрой можно скачать свободную демо версию(q2-314-demo-x86) c нашего сайта, ее вполне хватит для экспериментов с библиотекой. Также, нужно скачать и установить патч к quake 2 (q2-3.20-x86-full-ctf). Его также можно скачать с нашего сайта.

Игру лучше установить перед установкой библиотеки, так как при установке библиотеки будет запрошена директория, в которой находиться Quake 2.

Установка FEAR

Для установки версии 0.4 библиотеки FEAR можно использовать подготовленные для компилятора версии 8.0 установочные файлы, находящиеся на нашем сервере: архив модифицированной версии FEAR SDK.

Также вы можете скачать исходную версию FEAR SDK (fear-0.4.0-sdk.exe), которая находится по адресу http://prdownloads.sourceforge.net/fear/fear-0.4.0-sdk.exe?download, или может быть загружен с нашего сервера, но если вы используете компилятор версии 8, то скачиваемый код не будет компилироваться as is.

Рекомендуется установить код библиотеки инсталлятором, который установит необходимые переменные среды, а затем, переписать поверх исправленным кодом из архива.

Если вы сразу разархивируете подготовленный архив кода, вам придется вручную создать переменную среды FEAR_PLATFORM и присвоить ей строку пути к игре Quake2.

Для внесения ясности, опишем шаги, которые были произведены над исходным кодом с sourceforge при создании архива.

Был загружен проект fear.sln, удалена папка "boost", как указано на Рисунке 4:


Рисунок 4

и добавлена библиотека boost_filesystem (при компиляции c мультипоточной отладочной dll стандартной библиотеки в vc-8_0 она имеет имя boost_filesystem-vc80-mt-gd.lib, а для релиз-библиотеки - boost_filesystem-vc80-mt.lib) к проекту Quake 2 FEAR через (Project)/Properties/Linker/Input/Additional Dependencies, как показано на Рисунке 5


Рисунок 5

Замечание: подключая внешнюю библиотеку boost, убедитесь, что подключается библиотека соответствующая используемой стандартной библиотеке ( проверить в (Project)/Properties/C++/Code Generation/Runtime Library, для данного проекта по умолчанию Multi-threaded Debug DLL (/MDd) и Multi-threaded DLL (/MD) ), в противном случае, при добавлении неверной библиотеки проект скомпилируется, но будет выдавать ошибки во время работы.

После успешного завершения компиляции библиотек FEAR (в случае, если вы используете исходный код SDK, то он скомпилируется в VC7.0/VC7.1, но для VC8.0 вам также будет нужно поправить некоторые исходные файлы, при этом, однако, можно подглядывать изменения, которые были внесены в код в архиве) запустите проект Animats.sln в директории YourFEARDirectorydemos, скомпилируйте и этот проект. Наконец, проверьте, установились ли файлы dll в директорию drive:YourQuake2Installationfearmodules ( при успешном завершении процесса построения проекта они должны появится там ) , и убедитесь, что файлы из директории FEAR buildinstall есть в директории drive:YourQuake2Installationfearanimats ( эти файлы содержаться и в архиве данных о котором подробнее я расскажу чуть ниже ).

Кроме того, в проект были внесены следующие изменения -


Рисунок 6

Для каждого подпроекта изменено одно и то же для всех имя Program Database File Name на уникальное имя( см рисунок 4), это сделано потому, что при использовании одного и того же файла pdb ( global_vc7.pdb) , как это было в исходном файле проекта, приводит к жалобам среды на невозможность подключить отладочную информацию при отладке.

В процессе построения проекта компилятор скопирует на PostBuild шаге необходимые dll ( поглядите какие команды выполняется для каждого подпроекта в поле Command Line Properties/Build Events/Post Build Event/ ) в директорию drive:YourQuake2Installationfear


Рисунок 7

Можно попробовать использовать Quake2 с FEAR. Однако, стандартный Quake 2, работающий в полноэкранном режиме, и имеющего довольно ограниченные возможности по регулировки разных параметров, например яркости экрана, мало подходит для неторопливого изучения особенностей библиотеки, переключаться в среду разработки удобнее, если Quake 2 работает в окне и можно настраивать яркость игры.

Учитывая, что существует свободный код Quake 2 и его модификации, реализующие более гибкую настройку и оконный OpenGl, при создании архива был сделан еще один шаг по модификации проекта.

С сайта http://www.enigmaticsoftware.com/q2cp/ был взят мод Q2CP Quake 2 . Этот код также можно скачать с нашего сайта. Q2CP это код Quake 2 с некоторыми полезными расширениями, улучшающими возможности отладки и экспериментирования с FEAR. В архиве кода Q2CP включен в директорию quake2_Q2CP и подключен к проекту Animats.sln (как подключить проект в исходный SDK для тех, кто не знает , как это делается описано ниже , при описании отладки ). Также можно компилировать код Quake 2 отдельно, загрузив проект quake2_Q2CPQ2CP.sln.

Q2СP без проблем компилируется при использовании стандартных OpenGl хэдер файлов, но возникает проблема при подключении заголовочных файлов из NvidiaSDK. Поэтому, чтобы не возникали проблемы, после запуска проекта Q2CP.sln - убедитесь, что вы загружаете стандартные хэдер файлы OpenGL из поставки Visual Studio ( этого можно добиться, временно поставив пути к дополнительным SDK в самый низ списка в Tools/Options/Projects/VC++ Directories/, как показано на рисунке 8 ).


Рисунок 8

Q2CP имеет гибкие настройки отображения игры и по умолчанию поддерживает оконный режим OpenGL. Однако, перед компиляцией проекта, если вы скачали исходный код ( а не пользуетесь готовыми архивами ) еще придется подправить пути к выходным файлам. В скачиваемом проекте путь установленный в Properties/Linker/General указывает на e:3daction , укажите вместо этого путь к drive:YourQuake2Installation . Ниже рассмотрен способ интеграции кода с проектом примеров FEAR , в подготовленных архиве пути проекта установлены к $(FEAR_PLATFORM)quake2.exe и этот путь можно не изменять. Убедившись, что файлы ref_q2cpgl.dll и новый quake2.exe появились в папке игры, можно приступить к запуску FEAR.

Предыдущие версии инсталлятора FEAR устанавливали ярлыки ( shortcuts ) (FEAR) Server ; (FEAR) Player ; (FEAR) Spectator в директории Quake 2, через которые можно было легко запускать тестовые примеры, сначала запуская сервер, а затем или сцену с игроком или сцену, где можно наблюдать действия аниматов. Инсталлятор версии 0.4 FEAR не содержит данных файлов. Чтобы добавить удобств по запуску игры и в текущей версии, скачайте архив данных.

Разархивируйте содержимое архива в директорию Quake2 ( ярлыки (FEAR) Server, (FEAR) Player, (FEAR) Spectator должны оказаться непосредственно в вашей Quake2 директории), затем поменяйте в ярлыках подстроку F:Quake2 на строку, соответствующую вашей директорию ( как на рисунке 9). Теперь можно запускать игру с поддержкой FEAR.

Помимо ярлыков архив данных содержит bat файлы, которые содержат те же самые команды, но используют общий файл config.cfg ( то есть в строке параметров в этих файлах отсутствуют подстроки вида +exec player.cfg или +exec spectator.cfg)


Рисунок 9

Также, вы можете самостоятельно создать в директории Quake 2 три ярлыка на файл quake2.exe и переименовать их в соответственно

(FEAR) Server, (FEAR) Player, (FEAR) Spectator. Далее установить свойства ярлыкам ( правый щелчок на ярлыке - выберите Свойства ( Properties ) ). Во вкладке Ярлык (Shortcut ) как Target введите для:

(FEAR) Server: drive:/YourQuake2Installation/quake2.exe +set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map q2dm8

(FEAR) Player: drive:/YourQuake2Installation/quake2.exe +set game fear +connect 127.0.0.1 +exec player.cfg

(FEAR) Spectator: drive:/YourQuake2Installation/quake2.exe +set game fear +connect 127.0.0.1 +set spectator 1 +exec spectator.cfg

где drive:/YourQuake2Installation замените на свой путь к директории Quake2. На рисунке 9 данная директория ( на моем диске ) F:Quake2.

Чтобы получить указанные в параметрах запуска ярлыков или командных файлов файлы cfg не используя подготовленный архив, можно поступить следующим образом:

запустите (FEAR) Server а затем (FEAR) Player и закройте приложения - как результат должен будет сохраниться файл fear/config.cfg, его можно скопировать и переименовать в файлы fear/player.cfg и fear/spectator.cfg

Я рекомендую познакомится с комментариями по настройке конфигурационных файлов сfg по ссылке http://www.enigmaticsoftware.com/q2cp/ (например, как демонстрация возможностей настроек, файлы из архива данных позволяют получить более светлую картинку по сравнению со стандартной цветовой гаммой Quake 2).

Теперь все готово к началу работы, но дам несколько дополнительных советов

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

В силу популярности игры существует огромное количество bsp файлов для Quake 2 созданных умельцами и которые легко найти, для не знакомых с командами Quake 2 вы легко сможете подгружать эти уровни изменяя следующий за +map параметр и поместив ваши файлы bsp для Quake2 в директорию baseq2Maps

Например, если ваш bsp файл имеет имя YourBsp.bsp отредактируйте серверный файл таким образом, чтобы строка параметров выглядела так:

quake2.exe +set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map YourBsp

Можно взять bsp файлы с сайтов http://q2database.com/maps.html http://www.clanwos.org/maplist.htm, и подобных серверов - их огромное количество.

Помимо файлов bsp уровней, которые необходимо класть в директорию Maps есть много скомпилированных pak файлов.

Автор библиотеки FEAR рекомендует Gothic Resurrection pack (саморазархивирующийся архив, скачивание организовано несколько неудобным образом) его также можно скачать отсюда.

Для установки данного pak a, разархивруйте файл по ссылке и переименуйте grdm.pak в pakX.pak где X свободная цифра от 0 до 9 ( по вашему желанию ), затем поместите этот файл в директорию baseq2 в директории установки Quake 2 ( вы также можете познакомится с иструкциями в файлах справки находящиеся в архиве вместе с pak файлом ). Для загрузки первого уровня данного pak файла, параметры серверного ярлыка или bat файла будут.

quake2.exe +set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map grdm1

Множество разных pak файлов вы найдете на сайте поддержки игр quake http://www.planetquake.com/quake2/features/lotw/

Запуск сеанса игры с FEAR

Наконец, продемонстрируем, что получится если запустить (FEAR) Server


Рисунок 10

вы увидите окно сервера, в котором вы сможете ввести команды добавления ботов

sv add имя_анимата

(смотрите список инсталлированных аниматов в Quake2 директории fearanimats (имена поддиректорий соответствуют именам аниматов) имена ботов могут быть введены с большой и маленькой буквы),

а затем (FEAR) Player (вы сами охотитесь за аниматами) или (FEAR) Spectator (переключайтесь между добавленными аниматами клавишей пробел).


Рисунок 11

Вы также можете сразу добавить несколько аниматов, указав количество после имени, например так

sv add colin 2

Отладка аниматов под Visual Studio

Для отладки аниматов установите проект quake 2 (quake2 Q2CP) стартовым проектом в проекте Animats.sln (из архива, в нем над исходном проектом было выполнено File/Add Project/Add existing project , затем добавлены из папки кода quake2_Q2CP следующие проекты : quake2.vcproj /ref_gl/ref_gl.vcproj и /game/game.vcproj) и проект Quake2 FEAR в FEAR.sln .

Был загружен проект Animats, а далее через меню выполнено:

File/Add Project/Add existing project

затем добавлено из папки кода quake2_Q2CP следующие проекты : quake2.vcproj /ref_gl/ref_gl.vcproj и /game/game.vcproj

Правым кликом по проекту quake 2 как показано на рисунке 12


Рисунок 12

quake 2 следует установить стартовым проектом.

Далее, проверьте в Properties /Linker/General/Output File , что выходной файл будет помещен в Quake 2 директорию, лучше всего это сделать установив в строке Output file $(FEAR_PLATFORM)quake2 или, наконец, если вам больше нравиться, жестко задайте путь к директории Quake 2 , например так F:Quake2quake2.exe)

Для того, чтобы в процессе отладки и при запуске игры из под среды были найдены рабочие файлы Quake 2 установите Properties/Configuration Properties/Debugging/Working Directory в значение $(TargetDir), в Properties/Configuration Properties/Debugging/Command Arguments введите строку параметров, которая используется в вашем варианте (FEAR) Server, такую, например

+set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map q2dm8

или ту строку , которую вы будете использовать после установки дополнительных уровней, например,

+set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map grdm1

результат должен выглядеть примерно так, как отображено на Рисунке 13


Рисунок 13

Теперь вы можете запустить на отладку, при этом сначала вы увидите уже знакомое окно сервера, добавляя аниматов как и прежде командой sv add и установив точки останова в коде аниматов, после добавления - вы окажетесь в окне отладки Visual Studio.

Перейдя в директорию Quake 2 запустите или (FEAR) Player либо (FEAR) Spectator вы будете наблюдать за процессом игры ( и участвовать в нем ).

Для отладки процесса игры, измените строку командных аргументов на

+set game fear +connect 127.0.0.1 +exec player.cfg

Точно также, как и в проекте Animats.sln можно указывать те же самые строки отладки в проекте FEAR.sln (стартовым проектом может быть Quake 2 FEAR )

Упомянув об использовании переменных среды в проектах, хотелось бы добавить, что данные переменные можно широко использовать для настройки своих проектов (bспользуя их и в bat файлах, применение которых в проектах вы можете наблюдать на Post Build шаге ( Properties/Build Events/Post Build Event/Command Line ) шаге см. Рисунок 14 ).


Рисунок 14

Вы уже видели установку переменных среды через панель управления. Однако есть более гибкий способ установки с использованием утилит установки переменных среды. Эти утилиты можно вызывать как непосредственно в командном окне, так и через различные скрипты ( например, через bat файлы). Среди них наиболее известна setx - эта версия подойдет как для Windows 2000 так и для WindowsXP, она также содержится в пакете SupportTools для WindowsXP. Небольшой урок по использованию setx находиться на http://www.ss64.com/nt/setx.html. Также существует еще одна утилита подобного плана http://barnyard.syr.edu/~Evefatica/#SETENV.

Описание включенных в библиотеку аниматов

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

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

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

Breaker - анимат использующий правила ( rulebased animat) для вывода своих действий, английская версия урока по использованию данного анимат дано http://aigamedev.com/tutorials/RuleBasedSystem.html. Однако, в связи с изменениями в основном коде библиотеки в версии fear 4 данный пример работает с ошибками. Однако, в силу того, что в FEAR последней версии есть другой анимат , работающий на rulebased принципах - Stalker, вы можете попробовать найти ошибки и соответствующим образом исправить их. Также можно поэкспериментировать с предыдущими версиями FEAR, которые вы найдете на официальном сайте.

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

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

Jacky - анимат, использующий fuzzy логику для определения своих действий - посадку на платформу, открытие дверей, вызов элеватора, если анимат не находится около упомянутых объектов - он просто странствует по уровню.

Kanga - анимат, который применяет генетический алгоритм для нахождения параметров для отскоков и поворотов для ухода от запускаемого в него Rocket launcher. Для того, чтобы натренировать Kanga желательно найти и загрузить небольшую сцену ( какой нибудь bsp файл и положить его в baseq2Maps , например пусть это будет файл baseq2Mapstest.bsp ) , тогда ваш файл для запуска сервера будет иметь строку

quake2.exe +set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map test

или в строке отладки

set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map test

Затем, вы или должны войти в игру и выбрав Rocket launcher преследовать Kanga , или запустите анимата Salty. Salty будет стоять на месте и стрелять ракетами во все что движется вокруг, в этом случае удобнее войти для наблюдения за процессом тренировки необходимо войти как Spectator, иначе, в случае входа как игрок, Salty убьет вас.

Marvin - анимат, реализующий алгоритм ухода от столкновений ( collision avoidance ), в процессе работы Marvin собирает информацию об окружающем мире через вызовы space->TraceWalk и обработав ее делает повороты.

Возможные проблемы с простым подходом ухода от столкновений с этим аниматом :
- локальные ловушки - уровень может быть довольно сложным, и успешный обход препятствий может быть затруднен. В случае углов, анимат может застрять. Это произойдет , когда анимат решит повернуться в одну сторону, но потом сообразит, что другой поворот потенциально лучше. Для решения таких проблем необходимо добавлять штрафные функции для поворота или какие то другие способа разделения решений; длительное тестирование кода, которое порождается массой других проблем, помимо ловушек, поэтому несмотря на простоту, уходит масса времени на доводку параметров;
- не очень высокий реализм - в силу простых правил - анимат выглядит слишком роботоподобным;
- не высокая масштабируемость - если приходится обходить дополнительным кодированием несколько ситуаций, то трудоемкость отладки резко возрастет.

Mole - анимат Darth Mole использует обучение с подкреплением ( reinforcement learning ) для нахождения адаптивных deathmatch стратегий.

Moody - aнимат демонстрирующий возникновение различных эмоций под воздействием входных воздействий . Поместите Moody в простой уровень и добавьте несколько Stalker и Salty аниматов. Эмоции определяются двумя конечными автоматами для чувств и восприятия.

Onno - анимат, использующий нейронную сеть, разработан для предыдущей версии библиотеки, не работает в последней версии 0.4 FEAR ( поэксперементируйте c с предыдущими версиями, которые вы найдете на сайте FEAR ). Урок, посвященный данному анимату можно найти здесь: http://aigamedev.com/tutorials/NeuralNetwork.html.

Pain - анимат Major Pain, использет простой персептрон для обучения моментам времени стрельбы. Он стреляет, когда есть враг и готово оружие. Персептрон обучается простой операции AND над двумя входными воздействиями.

Picky - анимат с простым скриптом (проверьте наличие файла fearmodulesweapon_select.py , он есть в архиве кода) для процедуры голосования выбора лучшего оружия. Скрипт может напрямую взаимодействовать с окружением, собирая необходимую информацию. Выбранное оружие возвращается через высокоуровневый интерфейс. Однако, данный пример содержит ошибку, правда, напрямую не влияющую на работу анимата. Ошибка связана с реализацией синглентона и конкретно функцией Factory& Factory::GetInstance() из файла factory.hpp. Природа ошибки в том,что модуль С++ Framework библиотеки FEAR линкуется статически с каждой dll (в данном случае с двумя dll game.dll и PickyBrain.dll). Поэтому при запуске анимата Picky возникает ситуация, когда Factory& Factory::GetInstance() возвращает в PickyBrain.dll локальную копию фабрики, которая не совпадает с фабрикой созданной в game.dll и содержащей необходимую информацию. Выходом из ситуация могло быть превращение проекта файлов Fасtory в отдельную dll, для этого нужно сделать следующие шаги - создать проект Dll для Factory и вставить его в общий проект FEAR. Переместить в него ссылку на файл Factory.cpp, а затем добавить генерируемые dll и lib во всех требующихся ситуациях. Кроме того, есть и другая особенность - из файла Factory.cpp перенесена в файл Architecture.cpp реализация конструктора Exception::Exception( const std::string& msg, const std::string& fn, const int l ). Данный подход устраняет проблему с Picky, но создает проблему с динамической линковкой стандартной библиотеки. На самом деле, пример прекрасно работает, однако, как решение устранения warnings в процессе компиляции может быть а) написание своего map ( например http://www.thecodeproject.com/vcpp/stl/bimap.asp http://www.codeproject.com/cpp/ufstmaps.asp ), или обращению к статьям http://support.microsoft.com/kb/q168958/ http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html . Однако, поскольку Microsoft утверждает, что map экспортировать нельзя, столкнувшись с трудностями реализации подхода описанной (как работающей) по второй ссылке, я прекратил попытки.

Модификация библиотеки ( в том числе другие добавления ) выходят за рамки статьи.

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

Pinbot простой анимат, демонстрирующий обработку сообщений ботом от модуля физики.

Pyrophoric - простой анимат входит в группу аниматов в директории demosanimats, не включен в основной проект Animats.sln, но файлы для работы этого анимата устанавливаются в Quake 2 директорию , поэтому его стоит упомянуть. Может быть использован для изучения кода и самостоятельных экспериментов. Код можно поправить изучая код Bouncer и Marvin, попробуйте заставить его работать.

Rampage анимат, являющийся развитием PinBot а, добавляет к Pinbot у навыки использование оружия (без использованя самого оружия).

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

Rookie простой анимат, который умеет прицеливаться и выбирать цели.

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

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

Spin простейший анимат, который продвигаясь постоянно поворачивается. Упершись в препятствие - останавливается.

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

Stalker - анимат, следует вдоль стен, используя систему правил ( rule based system , RBS ) .

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

Tobor - анимат, похожий на Bouncerа. Также как и последний, бегает по уровню и наблюдает за своим окружением. В отличии от Bouncer а Tobor проверяет состояние флага наличия столкновения, в случае выставленного флага столкновения, Tobor поворачивается до тех пор, пока не может продолжить свое движение.

Небольшое послесловие.

Удобство работы в оконном режиме и возможности настраивать большее количество параметров, чем в стандартном quake2 , кода quake2_Q2CP добавляет, однако, некоторые сложности конфигурирования желаемых параметров, возникающих из за ошибок при сохранении cfg файлов.

При работе с FEAR и quake2_Q2CP с командами запуска, приведенными в статье, будут использоваться следующие файлы cfg

baseq2config.cfg

fearconfig.cfg

fearplayer.cfg

fearspectactor.cfg

В принципе, путаницу во многом легко избежать, если запускать ярлыки или bat файлы без указания специфических конфигурационных файлов , например:

(FEAR) Player

quake2.exe +set game fear +connect 127.0.0.1

вместо

quake2.exe +set game fear +connect 127.0.0.1 +exec player.cfg

и (FEAR) Spectator

quake2.exe +set game fear +connect 127.0.0.1 +set spectator 1

вместо

quake2.exe +set game fear +connect 127.0.0.1 +set spectator 1 +exec spectator.cfg

Такой подход немного уменьшит гибкость настройки режимов - зато разбираться придется всего лишь в двух файлах

baseq2config.cfg

fearconfig.cfg

Наконец, вы можете разобраться с кодом сохранения cfg файлов quake2_Q2CP и исправить его.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=1321