The most simplistic approach
Let's begin by illustrating the most common approach newcomers take in order to solve this problem. It starts by enumerating all the possible states a game could have:
enum class StateType{ Intro = 1, MainMenu, Game, Paused, GameOver, Credits };
Good start. Now let's put it to work by simply using a switch
statement:
void Game::Update(){ switch(m_state){ case(StateType::Intro): UpdateIntro(); break; case(StateType::Game): UpdateGame(); break; case(StateType::MainMenu): UpdateMenu(); break; ... } }
The same goes for drawing it on screen:
void Game::Render(){ switch(m_state){ case(StateType::Intro): DrawIntro(); break; case(StateType::Game): DrawGame(); break; case(StateType::MainMenu): DrawMenu(); break; ... } }
While this approach is okay for really small games, scalability here is completely out of the question. First of all, the switch statements are...