Лучший способ реализовать большой конечный автомат?

В основном у меня есть конечный автомат, который управляет атаками игрового персонажа, с таймингом, основанным на длине анимации.

Итак, для Пример:

Я начинаю с состояния по умолчанию, и если игрок нажимает кнопку атаки, он начинает атаку, переключая состояние и устанавливая таймер в зависимости от продолжительности атаки. Конечный автомат становится более сложным, когда я рассматриваю атаки с зарядом, которые можно отменить, атаки, которые могут переходить в разные состояния в зависимости от того, что они поражают, а также каждое состояние имеет уникальные способы борьбы с атакуемым персонажем. На данный момент у меня есть большие операторы переключения. Я думал о полиморфизме, но для этого потребуется новый класс для каждого состояния, которого много (например, для начала атаки, атаки и завершения атаки требуются отдельные состояния).

Оператор switch работает, но он довольно большой, а также не так легко модифицируется, как система, основанная на наследовании.

Есть ли предложения по красивым реализациям?

РЕДАКТИРОВАТЬ: Используется java.

10
задан Cratylus 16 June 2011 в 21:02
поделиться