aboutsummaryrefslogtreecommitdiff
path: root/src/games/minesweeper
diff options
context:
space:
mode:
Diffstat (limited to 'src/games/minesweeper')
-rw-r--r--src/games/minesweeper/Minesweeper.cpp33
-rw-r--r--src/games/minesweeper/Minesweeper.hpp15
2 files changed, 32 insertions, 16 deletions
diff --git a/src/games/minesweeper/Minesweeper.cpp b/src/games/minesweeper/Minesweeper.cpp
index f6b02ac..9b07362 100644
--- a/src/games/minesweeper/Minesweeper.cpp
+++ b/src/games/minesweeper/Minesweeper.cpp
@@ -8,13 +8,27 @@
#include <random>
#include <cstdio>
+
// Todo: winning condition (maybe: total_cells - uncovered_cells = mine_count)
+
+static constexpr Color s_mine_count_colors[8] = {
+ {0.0f, 0.0f, 1.0f, 1.0f}, // Blue
+ {0.0f, 0.5f, 0.0f, 1.0f}, // Green
+ {1.0f, 0.0f, 0.0f, 1.0f}, // Red
+ {0.0f, 0.0f, 0.5f, 1.0f}, // Dark Blue
+ {0.5f, 0.0f, 0.0f, 1.0f}, // Dark Red
+ {0.0f, 0.5f, 0.5f, 1.0f}, // Cyan
+ {0.0f, 0.0f, 0.0f, 1.0f}, // Black
+ {0.5f, 0.5f, 0.5f, 1.0f}, // Gray
+};
+
+
Minesweeper::Minesweeper()
{
- m_font.Init("fonts/dejavu_ttf/DejaVuSansMono.ttf", 16);
- for (uint32_t i = 0; i < m_digit_glyphs.size(); ++i) {
- m_font.LoadGlyph(m_digit_glyphs[i], i + '0');
+ bool font_init = m_font.Init(s_font_filepath, 22);
+ if (!font_init) {
+ printf("m_font.Init(...) failed\n");
}
}
@@ -39,7 +53,7 @@ Minesweeper::Reset(Difficulty difficulty)
}
- float cell_size = 1.2f * std::min(m_world_height / MAX_MAP_HEIGHT, m_world_width / MAX_MAP_WIDTH);
+ float cell_size = 1.2f * std::min(m_world_height / max_map_height, m_world_width / max_map_width);
float cell_size_without_border = 0.8f * cell_size;
V2F32 grid_size = {
@@ -399,11 +413,14 @@ Minesweeper::DrawBoard()
256.0f * cell_pos.y,
256.0f
};
- size_t mine_count_val = (size_t)m_adjacent_mine_counts[y*m_grid_width + x];
- g_renderer.PushMonoBitmap(
- m_digit_glyphs[mine_count_val].bitmap,
+ int32_t mine_count = m_adjacent_mine_counts[y*m_grid_width + x];
+
+ Color color = s_mine_count_colors[mine_count-1];
+ Glyph& glyph = m_font.GetGlyph('0' + (char32_t)mine_count);
+ g_renderer.PushAlphaBitmap(
+ glyph.bitmap,
mine_count_pos,
- Color{0.0f, 0.0f, 0.0f, 0.0f});
+ color);
}
}
}
diff --git a/src/games/minesweeper/Minesweeper.hpp b/src/games/minesweeper/Minesweeper.hpp
index 867ca6a..24672f0 100644
--- a/src/games/minesweeper/Minesweeper.hpp
+++ b/src/games/minesweeper/Minesweeper.hpp
@@ -48,9 +48,9 @@ private:
private:
- static constexpr int32_t MAX_MAP_HEIGHT = 32;
- static constexpr int32_t MAX_MAP_WIDTH = 32;
- static constexpr std::string_view s_FontFilepath = "./fonts/dejavu_ttf/DejaVuSans.ttf";
+ static constexpr int32_t max_map_height = 32;
+ static constexpr int32_t max_map_width = 32;
+ static constexpr const char* s_font_filepath = "./fonts/dejavu_ttf/DejaVuSans.ttf";
private:
@@ -64,13 +64,12 @@ private:
V2F32 m_cell_outer_size;
V2F32 m_cell_inner_size;
- uint32_t m_is_covered_bitmap[MAX_MAP_HEIGHT] {};
- uint32_t m_is_flagged_bitmap[MAX_MAP_HEIGHT] {};
- uint32_t m_is_mine_bitmap[MAX_MAP_HEIGHT] {};
- int32_t m_adjacent_mine_counts[MAX_MAP_WIDTH * MAX_MAP_HEIGHT] {};
+ uint32_t m_is_covered_bitmap[max_map_height] {};
+ uint32_t m_is_flagged_bitmap[max_map_height] {};
+ uint32_t m_is_mine_bitmap[max_map_height] {};
+ int32_t m_adjacent_mine_counts[max_map_width * max_map_height] {};
Font m_font;
- std::array<Glyph, 9> m_digit_glyphs;
};