#pragma once #include #include #include #include class Game { public: enum GameType { no_game, minesweeper, snake, tetris }; enum GameStatus { game_starting, game_resuming, game_over, game_paused, game_exit }; static std::unique_ptr Select(GameType type); Game() = default; virtual ~Game() = default; virtual bool Update(std::vector& events) = 0; protected: void DrawGameOverMenu(); void DrawGamePausedMenu(); float ProcessDt(); GameStatus m_game_status {game_starting}; float m_dt_remaining_seconds {0.0f}; uint64_t m_tlast_milliseconds {SDL_GetTicks()}; };