#pragma once #include #include #include #include #include #include class Tetris : public Game { public: Tetris(); bool Update(std::vector& events) override; private: void Start(); void UpdateResumeState(SDL_Event& event); void UpdatePauseState(SDL_Event& event); uint32_t GetSoftdropCount(float dt); void HandleTetrominoPlacement(); int32_t ReadHighscore(); void WriteHighscore(); void Draw(); void DrawLineCounter(); void DrawStatistics(); void DrawScore(); void DrawNextTetromino(); void DrawLevel(); void DrawGameOverMenu(); private: static constexpr Color s_text_color {0.9f, 0.9f, 0.9f, 1.0f}; static constexpr float s_text_z {10.0f}; static constexpr size_t s_frame_strings_capacity {32}; static constexpr char s_tetris_highscore_path[]{"tetris_highscore.txt"}; Font m_font; Board m_board; Tetromino m_active_tetromino; Tetromino::Id m_next_tetromino_id; int32_t m_tetromino_counters[Tetromino::id_count] {}; int32_t m_score = 0; int32_t m_line_counter = 0; int32_t m_starting_level = 0; int32_t m_level = 0; int32_t m_softdrop_counter = 0; int32_t m_highscore = 0; Arena m_frame_arena {KIBIBYTES(2)}; };