#ifndef GAME_H #define GAME_H #include #include "ui.h" // for DisplayList and colors namespace esp32 { namespace game { using namespace esp32::ui; // 棋盘尺寸(经典 10x20) static const int COLS = 10; static const int ROWS = 20; enum class State : uint8_t { Playing = 0, GameOver = 1 }; struct Piece { uint8_t type; // 0..6 int8_t x; // 左上角/参考点 int8_t y; // 仅使用一个朝向(简化:不提供旋转) int8_t blocks[4][2]; // 4 个方块偏移 uint16_t color; }; struct Tetris { uint8_t board[ROWS][COLS]; // 0=空,其它=颜色索引或标记 uint16_t colors[8]; // 颜色表(index->RGB565) Piece current; uint32_t lastDropMs = 0; uint32_t dropInterval = 700; // ms State state = State::Playing; uint32_t score = 0; uint32_t rng = 1; }; void init(Tetris& g); void reset(Tetris& g); void update(Tetris& g, uint32_t nowMs); // 输入 void moveLeft(Tetris& g); void moveRight(Tetris& g); void hardDrop(Tetris& g); // UI 构建 void buildScene(const Tetris& g, DisplayList& out, int16_t screenW, int16_t screenH, int16_t cell, int16_t originX, int16_t originY); } // namespace game } // namespace esp32 #endif // GAME_H