В данной статье мы рассмотрим теорию, а также узнаем, как использовать простой и основанный на стеке конечный автомат. Отправной точкой является состояние «find leaf», которое остается активным до тех пор, пока муравей не найдет лист. Когда это произойдет, то состояние сменится на «go home».

  • Метод setState() будет задавать новое активное состояние.
  • Если состояние «find leaf» активно, но курсор мыши находится рядом с муравьем, то состояние меняется на «run away».
  • Каждое ребро имеет метку, информирующую о том, когда должен произойти переход.
  • Когда это произойдет, то состояние сменится на «go home».
  • Конечные автоматы, безусловно, полезны для реализации логики искусственного интеллекта в играх.

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

Использование Fsm, Основанного На Стеке

Обратите внимание на то, что при направлении домой или из дома муравей не будет бояться курсора мыши. Состояние goHome() — используется для того, чтобы муравей отправился домой. Эти переменные будут использоваться для расчета движения с помощью метода Эйлера. Функция update() вызывается при каждом обновлении кадра игры.

конечный автомат это

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

Планирование Состояний И Их Переходов

Выше мы уже показывали набор его состояний и переходов между ними. Проиллюстрируем их еще раз, но в https://deveducation.com/ этот раз сосредоточимся на коде. Наш муравей представлен классом Ant, в котором есть поле brain.

конечный автомат это

Каждое ребро имеет метку, информирующую о том, когда должен произойти переход. Например, на изображении выше видно, что автомат сменит состояние «wander» на состояние «attack» при условии, что игрок находится рядом. Конечные автоматы, безусловно, полезны для реализации логики искусственного интеллекта в играх. Они могут быть легко представлены в виде графа, что позволяет разработчику увидеть все возможные варианты. // что состояние « goHome » вновь будет активным при завершении состояния « runAway ». // что состояние « findLeaf » вновь будет активным при завершении состояния « runAway ».

Конечный Автомат: Теория И Реализация

Например, состояние attack() само должно удалять себя из стека в том случае, если враг был уже уничтожен. Метод update() класса FSM должен вызываться каждый кадр игры. А он, в свою очередь, будет вызывать функцию того состояния, которое в данный момент является активным. Конечный автомат можно представить в виде графа, вершины которого являются состояниями, а ребра — переходы между ними.

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

Реализация Простого Конечного Автомата

Метод setState() будет задавать новое активное состояние. Конечный автомат (или попросту FSM — Finite-state machine) это модель вычислений, основанная на гипотетической машине состояний. В один момент времени только одно состояние может быть активным. Следовательно, для выполнения каких-либо действий машина должна менять свое состояние. И, наконец, состояние runAway() — используется при уворачивании от курсора мыши. Ниже приводится реализация каждого из методов, начиная с findLeaf() — состояния, ответственного за поиск листьев.

Улучшение Fsm: Автомат, Основанный На Стеке

Если состояние «find leaf» активно, но курсор мыши находится рядом с муравьем, то состояние меняется на «run away». Как только муравей будет в достаточно безопасном расстоянии от курсора мыши, состояние вновь сменится на «find leaf». Конечный автомат — это некоторая абстрактная модель, содержащая конечное число состояний чего-либо. Используется для представления и управления потоком выполнения каких-либо команд. Конечный автомат идеально подходит для реализации искусственного интеллекта в играх, получая аккуратное решение без написания громоздкого и сложного кода.

Catégories : Non classé