aboutsummaryrefslogtreecommitdiff
path: root/src/games
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-09-27 18:19:42 +0200
committerfschildt <florian.schildt@protonmail.com>2025-09-27 18:20:14 +0200
commit3d30e1ee9d1c9fb67cca8e3f178ba5fd05a2726e (patch)
treeb9b4cdb2f50d9bccc98df895fbc02c74ad4af0e7 /src/games
parentdbb42e741d29ab213f2a51fc8d9568c02f844647 (diff)
tetris: use unscoped enums in Tetromino class
Diffstat (limited to 'src/games')
-rw-r--r--src/games/tetris/Board.cpp14
-rw-r--r--src/games/tetris/Tetris.cpp40
-rw-r--r--src/games/tetris/Tetris.hpp2
-rw-r--r--src/games/tetris/Tetromino.cpp19
-rw-r--r--src/games/tetris/Tetromino.hpp38
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);