FUNCTION InitGameFSM(Priority):
SET MyPriority = Priority
SET CurrentState = InitPState
CREATE InitialEvent of type ES_INIT
IF PostEventToService(MyPriority, InitialEvent) is successful:
RETURN True
ELSE:
RETURN False
FUNCTION PostGameFSM(Event):
RETURN PostEventToService(MyPriority, Event)
FUNCTION RunGameFSM(Event):
SET ReturnEvent to ES_NO_EVENT (default no errors)
SWITCH CurrentState:
CASE InitPState:
IF Event.Type == ES_INIT:
PERFORM Initialization Actions (e.g., setting up hardware, initializing variables)
SET CurrentState to Idle
CREATE Event of type IDLING
PostGameFSM(Event)
CASE Idle:
SWITCH Event.Type:
CASE IDLING:
HANDLE Idle Behavior (e.g., LED operations, timers, motor setup)
If game ends:
Display final message on LED Matrix based on user score
CASE ES_TIMEOUT:
RESET CoinCounter, Set CurrentState to Idle, Post IDLING Event
CASE COIN_INSERT:
INCREMENT CoinCounter
IF CoinCounter == 2:
INITIALIZE game settings (e.g., score, timers)
SET CurrentState to OutputSeq
Post GAME_START Event
ELSE:
RESET timeout timers
CASE OutputSeq:
SWITCH Event.Type:
CASE GAME_OVER:
LOG "Game Over"
SET CurrentState to Idle
Post IDLING Event
CASE GAME_START:
START Game (e.g., LED initialization, sequence playback)
SET CurrentState to OutputSeq
Post PLAY_SEQUENCE Event
CASE PLAY_SEQUENCE:
PREPARE sequence for playback
SET CurrentState to OutputSeq
CASE EXPECTED_SEQUENCE:
UPDATE OutputSeqArr
IF sequence complete:
SET CurrentState to Wait4Input
Post WAITING_INPUT Event
CASE Wait4Input:
SWITCH Event.Type:
CASE GAME_OVER:
LOG "Game Over"
SET CurrentState to Idle
Post IDLING Event
CASE RECORD_INPUT:
VALIDATE user input against sequence
IF input correct:
INCREMENT difficulty
Post PLAY_SEQUENCE Event
SET CurrentState to OutputSeq
ELSE:
Post PLAY_SEQUENCE Event (replay sequence)
SET CurrentState to OutputSeq
RETURN ReturnEvent
FUNCTION QueryGameFSM():
RETURN CurrentState