Содержание
Каждое ребро имеет метку, информирующую о том, когда должен произойти переход. Например, на изображении выше видно, что автомат сменит состояние «wander» на состояние «attack» при условии, что игрок находится рядом. Конечные автоматы, безусловно, полезны для реализации логики искусственного интеллекта в играх. Они могут быть легко представлены в виде графа, что позволяет разработчику увидеть все возможные варианты. // что состояние “goHome” вновь будет активным при завершении состояния “runAway”. // что состояние “findLeaf” вновь будет активным при завершении состояния “runAway”.
Если состояние «find leaf» активно, но курсор мыши находится рядом с муравьем, то состояние меняется на «run away». Как только муравей будет в достаточно безопасном расстоянии от курсора мыши, состояние вновь сменится на «find leaf». Конечный автомат — это некоторая абстрактная модель, конечный автомат содержащая конечное число состояний чего-либо. Используется для представления и управления потоком выполнения каких-либо команд. Конечный автомат идеально подходит для реализации искусственного интеллекта в играх, получая аккуратное решение без написания громоздкого и сложного кода.
Реализация Простого Конечного Автомата
Например, состояние attack() само должно удалять себя из стека в том случае, если враг был уже уничтожен. Метод update() класса FSM должен вызываться каждый кадр игры. А он, в свою очередь, будет вызывать функцию того состояния, которое в данный момент является активным. Конечный автомат можно представить в виде графа, вершины которого являются состояниями, а ребра — переходы между ними.
- Конечный автомат можно представить в виде графа, вершины которого являются состояниями, а ребра — переходы между ними.
- Конечные автоматы, безусловно, полезны для реализации логики искусственного интеллекта в играх.
- Метод setState() будет задавать новое активное состояние.
- В один момент времени только одно состояние может быть активным.
- Например, на изображении выше видно, что автомат сменит состояние «wander» на состояние «attack» при условии, что игрок находится рядом.
Это же состояние останется активным, пока наш муравей не доберется до муравейника. Реализация конечного автомата с функциями-состояниями является простым, но в то же время мощным методом. Даже более сложные переплетения состояний могут быть реализованы при помощи FSM. Такой конечный автомат может быть реализован так же, как и простой. Отличием будет использование массива указателей на необходимые состояния. Вершина стека уже будет указывать на активное состояние.
Улучшение Fsm: Автомат, Основанный На Стеке
Выше мы уже показывали набор его состояний и переходов между ними. Проиллюстрируем их еще раз, но в этот раз сосредоточимся на коде. Наш муравей представлен классом Ant, в котором есть поле brain.
Обратите внимание на то, что при направлении домой или из дома муравей не будет бояться курсора мыши. Состояние goHome() — используется для того, чтобы муравей отправился https://deveducation.com/ домой. Эти переменные будут использоваться для расчета движения с помощью метода Эйлера. Функция update() вызывается при каждом обновлении кадра игры.
Планирование Состояний И Их Переходов
Причем такая, что она будет вызываться при каждом обновлении кадра игры. Как уже говорилось, в activeState будет храниться указатель на функцию активного состояния. Конечный автомат можно реализовать при помощи одного класса. Идея состоит в том, чтобы реализовать каждое состояние как метод или функцию. Также будем использовать свойство activeState для определения активного состояния.
Решением такой проблемы является конечный автомат, основанный на стеке. В отличие от простого FSM, который мы реализовали выше, данный вид FSM использует стек для управления состояниями. В верхней части стека находится активное состояние, а переходы возникают при добавлении/удалении состояний из стека.
Использование Fsm, Основанного На Стеке
Метод setState() будет задавать новое активное состояние. Конечный автомат (или попросту FSM — Finite-state machine) это модель вычислений, основанная на гипотетической машине состояний. В один момент времени только одно состояние может быть активным. Следовательно, для выполнения каких-либо действий машина должна менять свое состояние. И, наконец, состояние runAway() — используется при уворачивании от курсора мыши. Ниже приводится реализация каждого из методов, начиная с findLeaf() — состояния, ответственного за поиск листьев.
Конечный Автомат: Теория И Реализация
В данной статье мы рассмотрим теорию, а также узнаем, как использовать простой и основанный на стеке конечный автомат. Отправной точкой является состояние «find leaf», которое остается активным до тех пор, пока муравей не найдет лист. Когда это произойдет, то состояние сменится на «go home».
Recent Comments