From b46a0d9369fbaa1938f0968ab216bc2d564a9c37 Mon Sep 17 00:00:00 2001 From: fschildt Date: Mon, 21 Jul 2025 16:07:28 +0200 Subject: first commit --- src/games/tetris/Tetris.hpp | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/games/tetris/Tetris.hpp (limited to 'src/games/tetris/Tetris.hpp') diff --git a/src/games/tetris/Tetris.hpp b/src/games/tetris/Tetris.hpp new file mode 100644 index 0000000..30167d8 --- /dev/null +++ b/src/games/tetris/Tetris.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include +#include +#include +#include +#include + +enum class TetrisRunningState { + Resume, + Pause, + GameOver, + Restart, + Exit +}; + + +class Tetris : public Game { +public: + Tetris(); + bool Update(std::vector &events, RenderGroup& render_group) override; + void HandleTetrominoPlacement(); + +private: + void Restart(); + void UpdateResumeState(SDL_Event &event); + void UpdatePauseState(SDL_Event &event); + + uint32_t GetHarddropCount(float dt); + void HandleGameOver(); + + void Draw(RenderGroup &render_group); + void DrawLineCounter(RenderGroup &render_group); + void DrawStatistics(RenderGroup &render_group); + void DrawScore(RenderGroup &render_group); + void DrawNextTetromino(RenderGroup &render_group); + void DrawLevel(RenderGroup &render_group); + + void DrawPauseMenu(RenderGroup &render_group); + void DrawGameOverMenu(RenderGroup &render_group); + +private: + static constexpr ImGuiWindowFlags s_MenuImGuiWindowFlags = ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_AlwaysAutoResize; + static constexpr ImGuiWindowFlags s_DefaultImGuiWindowFlags = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoScrollbar; + + +private: + TetrisRunningState m_RunningState = TetrisRunningState::Resume; + + float m_DtInSecondsRemaining = 0.0f; + uint64_t m_MillisecondsSinceT0Last = SDL_GetTicks(); + + Board m_Board; + Tetromino m_ActiveTetromino; + Tetromino m_NextTetromino; + + int32_t m_TetrominoCounters[(size_t)TetrominoId::TETROMINO_ID_COUNT] {}; + int32_t m_Score = 0; + int32_t m_LineCounter = 0; + int32_t m_StartingLevel = 0; + int32_t m_Level = 0; + int32_t m_SoftdropCounter = 0; + + int32_t m_HighScore = 0; +}; + + -- cgit v1.2.3