Another approach to implement the provided Finit State Machine (FSM). The provided approach is in my opinion a typical over complicated solution. A State is not more than basically choosing a function for every state, and maybe having a transition between states.
Turning each functions into its own class does not simplify anything or makes anything more reusable than a plain old function.
YouTube Video for this project found at: https://www.youtube.com/watch?v=qwOM3v8T33Q