package org.squirrelframework.foundation.fsm.snake; import org.squirrelframework.foundation.fsm.StateMachine; import org.squirrelframework.foundation.fsm.StateMachine.TransitionCompleteEvent; import org.squirrelframework.foundation.fsm.StateMachineBuilderFactory; import org.squirrelframework.foundation.fsm.StateMachineConfiguration; import org.squirrelframework.foundation.fsm.UntypedStateMachine; import org.squirrelframework.foundation.fsm.UntypedStateMachineBuilder; import org.squirrelframework.foundation.fsm.snake.SnakeController.SnakeEvent; import org.squirrelframework.foundation.fsm.snake.SnakeController.SnakeState; public class Main { public static void main(String[] args) { final SnakeModel gameModel = new SnakeModel(); UntypedStateMachineBuilder builder = StateMachineBuilderFactory.create(SnakeController.class); builder.setStateMachineConfiguration(StateMachineConfiguration.create().enableRemoteMonitor(true)); // define timed state builder.defineTimedState(SnakeState.UP, 0, GameConfigure.FRAME_TIME, SnakeEvent.MOVE_AHEAD, gameModel); builder.defineTimedState(SnakeState.DOWN, 0, GameConfigure.FRAME_TIME, SnakeEvent.MOVE_AHEAD, gameModel); builder.defineTimedState(SnakeState.RIGHT, 0, GameConfigure.FRAME_TIME, SnakeEvent.MOVE_AHEAD, gameModel); builder.defineTimedState(SnakeState.LEFT, 0, GameConfigure.FRAME_TIME, SnakeEvent.MOVE_AHEAD, gameModel); SnakeController controller = builder.newUntypedStateMachine(SnakeState.NEW); final SnakeGame game = new SnakeGame(controller, gameModel); controller.addTransitionCompleteListener(new StateMachine.TransitionCompleteListener<UntypedStateMachine, Object, Object, Object>() { @Override public void transitionComplete(TransitionCompleteEvent<UntypedStateMachine, Object, Object, Object> event) { game.repaint(); game.setTitle("Greedy Snake("+gameModel.length()+"): "+ event.getSourceState()+"--["+event.getCause()+"]--"+event.getTargetState()); } }); controller.export(); game.startGame(); } }