Конечные автоматы (не только для визуальных состояний) - хорошее решение для реализации поведения инкапсулированных компонентов, таких как кнопки или - в вашем случае - пункты меню, возможно, даже некоторая логика вашей игры.Их можно описать независимо для каждого компонента, и они помогают организовывать ваши взаимодействия и, таким образом, предотвращать ошибки.
Конечные автоматы трудно обслуживать, однако, когда вы просматриваете целое приложение: взаимодействия обычно многомерны (то есть задействован не только один компонент, но много, и на разных уровнях в иерархии), и когда все различные игроки будут приняты во внимание, конечный автомат скоро станет очень сложным.
По моему опыту, лучше всего использовать подход, управляемый событиями, в сочетании с Model-View-Controllerархитектура для вашей логики приложения, и использовать конечные автоматы на уровне компонентов.Я бы посоветовал взглянуть на некоторые из существующих платформ Model-View-Controller для этого, прежде всего RobotLegs , PureMVC и Parsley (хотя для меня, Parsleyкажется немного менее полным, чем два других).