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