diff options
| author | fschildt <florian.schildt@protonmail.com> | 2025-10-09 16:13:28 +0200 |
|---|---|---|
| committer | fschildt <florian.schildt@protonmail.com> | 2025-10-09 16:13:28 +0200 |
| commit | 6f3590341312b0ffff2304d02b24ac6a5d14b182 (patch) | |
| tree | 40a6f66ea548377f0114af29cc17a8692e83a141 /src/games/tetris/Tetromino.cpp | |
| parent | 606d028dac5118329e7561af33b15988db84465f (diff) | |
tetris: optimize next tetromino, fix first count
Diffstat (limited to 'src/games/tetris/Tetromino.cpp')
| -rw-r--r-- | src/games/tetris/Tetromino.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/src/games/tetris/Tetromino.cpp b/src/games/tetris/Tetromino.cpp index 97c8808..2cde231 100644 --- a/src/games/tetris/Tetromino.cpp +++ b/src/games/tetris/Tetromino.cpp @@ -2,7 +2,6 @@ #include <renderer/Renderer.hpp> #include <random> -#include <cstdlib> // layout of a left_aligned_bitmap: xxxx000000000000 // layout of a board_bitmap is 111xxxxxxxxxx111 @@ -58,26 +57,30 @@ static const uint16_t s_left_aligned_bitmaps[7][4][4] = { } }; +Tetromino::Tetromino(uint16_t* board_bitmap) + : m_board_bitmap{board_bitmap} +{ +} -Tetromino::TetrominoId Tetromino::GetRandomId() +Tetromino::Id +Tetromino::GenerateRandomId() { - static std::uniform_int_distribution<int> s_Dist(0, id_count-1); - static std::mt19937 s_Rng((std::random_device()())); - TetrominoId id = static_cast<TetrominoId>(s_Dist(s_Rng)); + static std::uniform_int_distribution<int> s_dist(0, id_count-1); + static std::mt19937 s_rng((std::random_device()())); + Id id = static_cast<Id>(s_dist(s_rng)); return id; } void -Tetromino::Reinit(uint16_t* board_bitmap) +Tetromino::Reset(Id id) { - m_id = GetRandomId(); + m_id = id; m_pos = {6, 20}; m_ori = {0}; - m_board_bitmap = board_bitmap; } -Tetromino::TetrominoId +Tetromino::Id Tetromino::GetId() { return m_id; @@ -103,7 +106,7 @@ Tetromino::IsCollisionWithBoard() } void -Tetromino::MaybeRotate(TetrominoRotation rotation) +Tetromino::MaybeRotate(Rotation rotation) { int32_t ori = (m_ori + rotation) % 4; if (!IsCollisionWithBoard(m_id, m_pos, ori, m_board_bitmap)) { @@ -112,7 +115,7 @@ Tetromino::MaybeRotate(TetrominoRotation rotation) } void -Tetromino::MaybeMoveHorizontally(TetrominoDirection direction) +Tetromino::MaybeMoveHorizontally(Direction direction) { BoardPos pos = m_pos; pos.x += static_cast<int32_t>(direction); @@ -152,7 +155,7 @@ Tetromino::Draw() } bool -Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *board_bitmap) +Tetromino::IsCollisionWithBoard(Id id, BoardPos pos, int32_t ori, uint16_t *board_bitmap) { uint16_t tetromino_bitmap[16]; GetBitmap(id, pos, ori, tetromino_bitmap); @@ -164,19 +167,16 @@ Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint1 } void -Tetromino::GetBitmap(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *bitmap) +Tetromino::GetBitmap(Id id, BoardPos pos, int32_t ori, uint16_t *bitmap) { - size_t id_ = static_cast<size_t>(id); - uint64_t *src = (uint64_t*)s_left_aligned_bitmaps[id_][ori]; + uint64_t *src = (uint64_t*)s_left_aligned_bitmaps[id][ori]; uint64_t *dest = (uint64_t*)bitmap; *dest = *src >> pos.x; } Color -Tetromino::GetColor(TetrominoId id) +Tetromino::GetColor(Id id) { - using enum TetrominoId; - Color color; switch (id) { @@ -200,16 +200,14 @@ Tetromino::GetColor(TetrominoId id) } void -Tetromino::Draw(TetrominoId id, int32_t ori, V2F32 pos, float scale) +Tetromino::Draw(Id id, int32_t ori, V2F32 pos, float scale) { - int32_t id_ = static_cast<int32_t>(id); - float world_height = 3.0f; float tetromino_size_with_border = scale * world_height / 20.0f; float tetromino_size = 0.8f * tetromino_size_with_border; float tetromino_offset = 0.1f * tetromino_size_with_border; - uint16_t *left_aligned_bitmap = (uint16_t*)s_left_aligned_bitmaps[id_][ori]; + uint16_t *left_aligned_bitmap = (uint16_t*)s_left_aligned_bitmaps[id][ori]; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { if (left_aligned_bitmap[y] & (0x8000 >> x)) { |
