diff options
| author | fschildt <florian.schildt@protonmail.com> | 2025-09-27 18:19:42 +0200 |
|---|---|---|
| committer | fschildt <florian.schildt@protonmail.com> | 2025-09-27 18:20:14 +0200 |
| commit | 3d30e1ee9d1c9fb67cca8e3f178ba5fd05a2726e (patch) | |
| tree | b9b4cdb2f50d9bccc98df895fbc02c74ad4af0e7 | |
| parent | dbb42e741d29ab213f2a51fc8d9568c02f844647 (diff) | |
tetris: use unscoped enums in Tetromino class
| -rw-r--r-- | src/games/tetris/Board.cpp | 14 | ||||
| -rw-r--r-- | src/games/tetris/Tetris.cpp | 40 | ||||
| -rw-r--r-- | src/games/tetris/Tetris.hpp | 2 | ||||
| -rw-r--r-- | src/games/tetris/Tetromino.cpp | 19 | ||||
| -rw-r--r-- | src/games/tetris/Tetromino.hpp | 38 |
5 files changed, 60 insertions, 53 deletions
diff --git a/src/games/tetris/Board.cpp b/src/games/tetris/Board.cpp index 2230ee5..87a0e22 100644 --- a/src/games/tetris/Board.cpp +++ b/src/games/tetris/Board.cpp @@ -12,14 +12,14 @@ Board::Board() { for (int y = 0; y < 22; y++) { for (int x = 0; x < 10; x++) { - m_Idmap[y][x] = (uint8_t)TetrominoId::TETROMINO_ID_NONE; + m_Idmap[y][x] = Tetromino::tetromino_id_none; } } } int32_t Board::PlaceTetromino(Tetromino &tetromino) { BoardPos pos = tetromino.GetPos(); - TetrominoId id = tetromino.GetId(); + Tetromino::TetrominoId id = tetromino.GetId(); uint16_t tetromino_bitmap[4]; tetromino.GetBitmap(tetromino_bitmap); @@ -44,7 +44,7 @@ int32_t Board::PlaceTetromino(Tetromino &tetromino) { if (tetromino_bitmap[y] & bitmap_x) { int32_t idmap_x = pos.x + x - 3; int32_t idmap_y = pos.y + y - 2; - m_Idmap[idmap_y][idmap_x] = static_cast<uint8_t>(id); + m_Idmap[idmap_y][idmap_x] = id; } } } @@ -77,7 +77,7 @@ int32_t Board::ClearRows(int32_t y0) { } for (int32_t y = 24-rows_cleared; y < 24; y++) { m_Bitmap[y] = 0xe007; - std::fill(m_Idmap[y-2], m_Idmap[y-2] + 10, (uint8_t)TetrominoId::TETROMINO_ID_NONE); + std::fill(m_Idmap[y-2], m_Idmap[y-2] + 10, Tetromino::tetromino_id_none); } @@ -119,8 +119,8 @@ void Board::Draw(int32_t level, RenderGroup& render_group) { // tetromino parts for (size_t y = 0; y < 20; y++) { for (size_t x = 0; x < 10; x++) { - uint8_t tetromino_id = m_Idmap[y][x]; - if (tetromino_id < (uint8_t)TetrominoId::TETROMINO_ID_COUNT) { + Tetromino::TetrominoId tetromino_id = (Tetromino::TetrominoId)m_Idmap[y][x]; + if (tetromino_id < Tetromino::tetromino_id_count) { V2F32 local_pos = { (float)x * tetromino_size_with_border + tetromino_offset, (float)y * tetromino_size_with_border + tetromino_offset @@ -142,7 +142,7 @@ void Board::Draw(int32_t level, RenderGroup& render_group) { }; - Color color = Tetromino::GetColor(static_cast<TetrominoId>(tetromino_id)); + Color color = Tetromino::GetColor(tetromino_id); render_group.PushRectangle(world_rect, world_pos.z, color); } } diff --git a/src/games/tetris/Tetris.cpp b/src/games/tetris/Tetris.cpp index 24881a8..f2a7384 100644 --- a/src/games/tetris/Tetris.cpp +++ b/src/games/tetris/Tetris.cpp @@ -83,9 +83,9 @@ void Tetris::UpdateResumeState(SDL_Event &event) { case SDL_EVENT_KEY_DOWN: { auto key = event.key.key; if (key == SDLK_RIGHT) { - m_ActiveTetromino.MaybeMoveHorizontally(TetrominoDirection::Right); + m_ActiveTetromino.MaybeMoveHorizontally(Tetromino::right); } else if (key == SDLK_LEFT) { - m_ActiveTetromino.MaybeMoveHorizontally(TetrominoDirection::Left); + m_ActiveTetromino.MaybeMoveHorizontally(Tetromino::left); } else if (key == SDLK_DOWN) { bool moved_down = m_ActiveTetromino.MaybeMoveDown(); if (!moved_down) { @@ -95,9 +95,9 @@ void Tetris::UpdateResumeState(SDL_Event &event) { m_SoftdropCounter++; } } else if (key == SDLK_X) { - m_ActiveTetromino.MaybeRotate(TetrominoRotation::Clockwise); + m_ActiveTetromino.MaybeRotate(Tetromino::rotate_clockwise); } else if (key == SDLK_Z || key == SDLK_Y) { - m_ActiveTetromino.MaybeRotate(TetrominoRotation::CounterClockwise); + m_ActiveTetromino.MaybeRotate(Tetromino::rotate_counter_clockwise); } else if (key == SDLK_ESCAPE) { m_RunningState = TetrisRunningState::Pause; } @@ -131,7 +131,7 @@ void Tetris::HandleTetrominoPlacement() { m_LineCounter += rows_cleared; - m_TetrominoCounters[(size_t)m_ActiveTetromino.GetId()] += 1; + m_TetrominoCounters[m_ActiveTetromino.GetId()] += 1; if (rows_cleared == 1) { m_Score += 40 * (m_Level + 1); @@ -279,27 +279,25 @@ void Tetris::DrawStatistics(RenderGroup &render_group) { ImVec2 screen_text_gap = render_group.ViewSizeToScreenSizeImGui(view_text_gap); - using enum TetrominoId; - - Tetromino::Draw(TETROMINO_T, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::t_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_J, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::j_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_Z, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::z_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_O, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::o_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_S, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::s_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_L, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::l_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(TETROMINO_I, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::i_piece, 0, view_tetrominoes_pos, 0.5f, render_group); view_tetrominoes_pos.y -= view_advance.y; @@ -312,19 +310,19 @@ void Tetris::DrawStatistics(RenderGroup &render_group) { ImGui::SetNextWindowPos(screen_text_pos); ImGui::Begin("TetrisStatistics", nullptr, s_DefaultImGuiWindowFlags); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_T]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::t_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_J]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::j_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_Z]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::z_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_O]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::o_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_S]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::s_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_L]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::l_piece]); ImGui::Dummy(screen_text_gap); - ImGui::Text("%d", m_TetrominoCounters[(size_t)TETROMINO_I]); + ImGui::Text("%d", m_TetrominoCounters[Tetromino::i_piece]); ImGui::Dummy(screen_text_gap); ImGui::End(); diff --git a/src/games/tetris/Tetris.hpp b/src/games/tetris/Tetris.hpp index 30167d8..42981db 100644 --- a/src/games/tetris/Tetris.hpp +++ b/src/games/tetris/Tetris.hpp @@ -54,7 +54,7 @@ private: Tetromino m_ActiveTetromino; Tetromino m_NextTetromino; - int32_t m_TetrominoCounters[(size_t)TetrominoId::TETROMINO_ID_COUNT] {}; + int32_t m_TetrominoCounters[Tetromino::tetromino_id_count] {}; int32_t m_Score = 0; int32_t m_LineCounter = 0; int32_t m_StartingLevel = 0; diff --git a/src/games/tetris/Tetromino.cpp b/src/games/tetris/Tetromino.cpp index 78ac68d..a77fa57 100644 --- a/src/games/tetris/Tetromino.cpp +++ b/src/games/tetris/Tetromino.cpp @@ -57,8 +57,8 @@ static const uint16_t s_left_aligned_bitmaps[7][4][4] = { }; -TetrominoId Tetromino::GetRandomId() { - static std::uniform_int_distribution<int> s_Dist(0, (int)TetrominoId::TETROMINO_ID_COUNT-1); +Tetromino::TetrominoId Tetromino::GetRandomId() { + static std::uniform_int_distribution<int> s_Dist(0, tetromino_id_count-1); static std::mt19937 s_Rng((std::random_device()())); TetrominoId id = static_cast<TetrominoId>(s_Dist(s_Rng)); return id; @@ -77,7 +77,7 @@ Tetromino::Tetromino(Board &board) : { } -TetrominoId Tetromino::GetId() { +Tetromino::TetrominoId Tetromino::GetId() { return m_Id; } @@ -95,8 +95,7 @@ bool Tetromino::IsCollisionWithBoard() { } void Tetromino::MaybeRotate(TetrominoRotation rotation) { - int32_t rot = static_cast<int32_t>(rotation); - int32_t ori = (m_Ori + rot) % 4; + int32_t ori = (m_Ori + rotation) % 4; if (!IsCollisionWithBoard(m_Id, m_Pos, ori, m_BoardBitmap)) { m_Ori = ori; } @@ -158,14 +157,14 @@ Color Tetromino::GetColor(TetrominoId id) { Color color; switch (id) { - case TETROMINO_I: - case TETROMINO_O: - case TETROMINO_T: { + case i_piece: + case o_piece: + case t_piece: { color = {0.8f, 0.8f, 0.8f, 1.0f}; } break; - case TETROMINO_J: - case TETROMINO_S: { + case j_piece: + case s_piece: { color = {0.8f, 0.2f, 0.2f, 1.0f}; } break; diff --git a/src/games/tetris/Tetromino.hpp b/src/games/tetris/Tetromino.hpp index d6d99c6..0f97821 100644 --- a/src/games/tetris/Tetromino.hpp +++ b/src/games/tetris/Tetromino.hpp @@ -5,23 +5,33 @@ #include <renderer/RenderGroup.hpp> #include <games/tetris/Board.hpp> -enum class TetrominoId : uint8_t { - TETROMINO_O = 0, - TETROMINO_S, - TETROMINO_Z, - TETROMINO_T, - TETROMINO_L, - TETROMINO_J, - TETROMINO_I, - TETROMINO_ID_COUNT, - TETROMINO_ID_NONE, -}; -enum class TetrominoRotation {Clockwise = 1, CounterClockwise = 3}; -enum class TetrominoDirection {Left = -1, Right = 1}; - class Tetromino { public: + enum TetrominoId : uint8_t { + o_piece, + s_piece, + z_piece, + t_piece, + l_piece, + j_piece, + i_piece, + tetromino_id_count, + tetromino_id_none, + }; + + enum TetrominoRotation { + rotate_clockwise = 1, + rotate_counter_clockwise = 3 + }; + + enum TetrominoDirection { + left = -1, + right = 1 + }; + + +public: Tetromino() = delete; Tetromino(Board &board); Tetromino(uint16_t *board_bitmap); |
