Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

[не]интересные идиоты

YPP (YPP_PUBLIC@MAIL.RU)

Спецвыпуск: Хакер, номер #064, стр. 064-038-2


Другой пример. Игровой уровень сам по себе может обладать неким подобием ИИ: если игрок уничтожит N врагов, поглумится над тремя трупами и дважды подпрыгнет на левой ноге, то откроется проход на следующий уровень.

Теперь рассмотрим некоторые самые популярные технологии создания игрового ИИ.

автоматы, которые не стреляют

Первая технология, которая несмотря на свою простоту оказывается очень мощной и применяется во многих играх, — это конечные автоматы (finite state machine). Для определения такой системы нужно задать два ключевых элемента: множество состояний и множество правил перехода системы из одного состояния в другое. Состояния имеют вид наподобие: иду, стою, стреляю, бездельничаю и т.д. Правила перехода: если ИДУ и вижу врага, тогда начинаю СТРЕЛЯТЬ; если ИДУ и устал, тогда нужно немного поСТОЯТЬ, отдохнуть.

Рассмотрим небольшой пример. Пусть нам нужно придумать ИИ для солдата, который держит дубину и патрулирует местность. Для простоты будем считать, что на местности нет никаких препятствий, а солдат ходит по четко определенному маршруту (ключевым точкам). Итак, какие действия он может выполнять? Первое, конечно — ходить по прямой от одной контрольной точки (waypoint) к другой. Введем еще состояние поворота от одной точки по направлению к следующей. Плюс, конечно же, каждый уважающий себя солдат должен уметь преследовать жертву и молотить ее дубиной.

Теперь нужно разобраться с правилами изменения состояний (см. рис. 1). Ходьба: если увидел врага — переход в состояние преследования; если пришел в нужную точку — начать поворот к следующей. Поворот: увидел врага — преследовать; если повернулся на достаточный угол — начать ходьбу. Преследование: врага не видно — разворот к нужной точке (возврат к патрулированию); подошел достаточно близко к противнику — начать бой. Бой: враг отошел дальше — преследовать; враг исчез (умер, сбежал) — поворот. Вот и все. Когда уже определены все состояния и переходы, закодить такую систему не составит большого труда.

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

Конечные автоматы являются, пожалуй, одной из самых старых (и проверенных временем) техник создания ИИ, особенно в FPS. Наши любимые Doom, Quake и Wolfenstein, — все имели ИИ, построенный на основе конечных автоматов.

добавим перцу

Сейчас посмотрим, как можно усовершенствовать конечные автоматы, чтобы системы на их основе выглядели еще лучше. Для начала замечу, что конечные автоматы бывают полностью детерминированными и недетерминированными. Различие состоит в том, что в недетерминированных переходы между состояниями являются не такими жесткими и имеют элемент случайности, непредсказуемости. Если в примере выше «научить» солдата с 10% вероятностью не замечать врага, а в случае исчезновения врага в 50% случаев возвращаться к патрулированию и еще в 50% — начинать поиски сбежавшей жертвы, то такая система уже становится недетерминированной.

Назад на стр. 064-038-1  Содержание  Вперед на стр. 064-038-3