[не]интересные идиоты YPP (YPP_PUBLIC@MAIL.RU) Спецвыпуск: Хакер, номер #064, стр. 064-038-3 Создавать конечный автомат с большим количеством состояний и правил перехода — задача не из легких. Иногда бывает проще разделить систему ИИ на несколько параллельно действующих и (почти) не связанных конечных автоматов, каждый из которых имеет свои состояния. Например, один автомат отвечает за патрулирование/преследование/атаку, а второй — за систему ведения огня: стрелять, не стрелять, перезарядить и т.д. Еще более удивительных результатов можно добиться при синхронизации конечных автоматов, работающих параллельно. Допустим, в нашей игре будут присутствовать отряды из трех солдат, которые охраняют некоторые локации. Конечно, каждый солдат может реализовывать свою логику ведения боя, но представь, насколько интереснее они смотрятся, если действуют слаженно. Например, один из солдат, заметив противника, сообщает об этом по рации (записывает это в общую память отряда) и принимает бой. Получив из общей памяти информацию о происходящем, другой солдат прикрывает товарища издалека («сообщая» об этом в ту же общую память). Наконец, третий боец начинает закидывать врага гранатами. Ну что, ничего не напоминает? (Даю наводку: Гордон Фримэн, монтировка, бригады солдат из первой Half-Life...) То-то же! жизнь по правилам Есть ситуации, в которых довольно проблемно поведение игрового агента выразить в терминах конечных автоматов. Например, когда из каждого состояния агент может переходить во все другие состояния или когда агент может пребывать в двух состояниях одновременно («идет» и «стреляет»). В таких случаях можно применить другую технологию — систему правил (rule system). Все поведение агента описывается набором простых правил вида: условие->действие. Сначала выбираем первое правило. Если условие в нем истинно, выполняем указанное действие и выходим (прекращаем проверку последующих условий). В противном случае переходим к следующему правилу, если таковые имеются. Как всегда, пример. Попробуем описать с помощью системы правил поведение юнита из одной RTS: 1 ВРАГ БЛИЗКО-> ДАТЬ ЕМУ ПО МОРДЕ 2 РАССТОЯНИЕ К ВРАГУ> ДВУХ МЕТРОВ && МЫ СИЛЬНЕЕ-> ДОГНАТЬ 3 РАССТОЯНИЕ К ВРАГУ> ДВУХ МЕТРОВ (ОН СИЛЬНЕЕ)-> ОЙ, ПОРА БЕЖАТЬ! 4 НАШИХ БЬЮТ-> ПОЙТИ НА ПОМОЩЬ 5 СТОЯТЬ И ЛЮБОВАТЬСЯ ПЕЙЗАЖАМИ Замечу, что в подобных системах порядок указания правил имеет большое значение. Например, если поменять местами правила №2 и 3, юнит начнет убегать и от сильных, и от слабых врагов. (Такое поведение системы объясняется тем, что условие в правиле №3 включает в себя условие из правила №2.) Также замечу, что пятое правило вообще не имеет условия. Оно задает действие по умолчанию и равноценно правилу: true-> стоять и любоваться пейзажами. |