diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-03-26 20:47:12 +0100 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-03-26 20:47:12 +0100 |
| commit | 32a24182ad8cd2fc3a9125cb8f70de3b9c22f9a4 (patch) | |
| tree | f2d3a9a1696d50ae28e88e9ba94684bf5ffee5d3 /firmware/include | |
| parent | 6b3fb653f8b342d8ecfc093a000e9f6fa479c644 (diff) | |
| download | tetris-console-32a24182ad8cd2fc3a9125cb8f70de3b9c22f9a4.tar.gz tetris-console-32a24182ad8cd2fc3a9125cb8f70de3b9c22f9a4.zip | |
add preliminary public apis
Diffstat (limited to 'firmware/include')
| -rw-r--r-- | firmware/include/game/blocks.h | 9 | ||||
| -rw-r--r-- | firmware/include/game/game_state.h | 38 | ||||
| -rw-r--r-- | firmware/include/inputs/button.h | 5 | ||||
| -rw-r--r-- | firmware/include/inputs/input.h | 17 | ||||
| -rw-r--r-- | firmware/include/ui/ui.h | 22 |
5 files changed, 89 insertions, 2 deletions
diff --git a/firmware/include/game/blocks.h b/firmware/include/game/blocks.h new file mode 100644 index 0000000..7e9b75f --- /dev/null +++ b/firmware/include/game/blocks.h @@ -0,0 +1,9 @@ +#pragma once + +#include <stdint.h> + +namespace game { + +enum class Block : uint8_t { T, L, J, O, I, Z, S, NONE }; + +} diff --git a/firmware/include/game/game_state.h b/firmware/include/game/game_state.h new file mode 100644 index 0000000..0878545 --- /dev/null +++ b/firmware/include/game/game_state.h @@ -0,0 +1,38 @@ +#pragma once + +#include <array> +#include <stdint.h> + +#include "game/blocks.h" +#include "inputs/input.h" + +namespace game { + +constexpr uint8_t NUM_ROWS { 20 }; +constexpr uint8_t NUM_COLS { 10 }; + +class GameState { +public: + GameState(); + + void update(const inputs::Input& input); + + uint32_t get_score(); + uint8_t get_level(); + + Block get_next_block(); + + Block get_block(uint8_t row, uint8_t col); + +private: + void move_down(); + void move_right(); + void move_left(); + + void rotate_right(); + void rotate_left(); + + std::array<Block, NUM_ROWS * NUM_COLS> grid; +}; + +} diff --git a/firmware/include/inputs/button.h b/firmware/include/inputs/button.h index c3530ae..908ea22 100644 --- a/firmware/include/inputs/button.h +++ b/firmware/include/inputs/button.h @@ -1,6 +1,6 @@ #pragma once -#include <cstdint> +#include <stdint.h> namespace inputs { @@ -8,9 +8,12 @@ class Button { public: Button(uint8_t pin); + void init(); + bool is_pressed(); private: + uint8_t pin; }; } diff --git a/firmware/include/inputs/input.h b/firmware/include/inputs/input.h index 7899ce7..116bd9c 100644 --- a/firmware/include/inputs/input.h +++ b/firmware/include/inputs/input.h @@ -6,7 +6,14 @@ namespace inputs { class Input { public: - Input(/* pins */); + Input( + uint8_t down_pin, + uint8_t up_pin, + uint8_t right_pin, + uint8_t left_pin, + uint8_t a_pin, + uint8_t b_pin, + uint8_t pause_pin); void init(); @@ -16,8 +23,16 @@ public: bool left_pressed(); bool a_pressed(); bool b_pressed(); + bool pause_pressed(); private: + Button down; + Button up; + Button left; + Button right; + Button a; + Button b; + Button pause; }; } diff --git a/firmware/include/ui/ui.h b/firmware/include/ui/ui.h new file mode 100644 index 0000000..44b4555 --- /dev/null +++ b/firmware/include/ui/ui.h @@ -0,0 +1,22 @@ +#pragma once + +#include <Adafruit_ST7735.h> +#include <stdint.h> + +#include "game/game_state.h" + +namespace ui { + +class UI { +public: + UI(int8_t tft_cs, int8_t tft_rst, int8_t tft_dc); + + void init(); + + void render_screen(const game::GameState& state); + +private: + Adafruit_ST7735 tft; +}; + +} |