refactored to multiple games implementation
This commit is contained in:
78
games/tic_tac_toe.h
Normal file
78
games/tic_tac_toe.h
Normal file
@@ -0,0 +1,78 @@
|
||||
// ============================================================================
|
||||
// TIC-TAC-TOE GAME HEADER
|
||||
// ============================================================================
|
||||
// Concrete implementation of the Game interface for Tic-Tac-Toe
|
||||
|
||||
#ifndef TIC_TAC_TOE_H
|
||||
#define TIC_TAC_TOE_H
|
||||
|
||||
#include "game.h"
|
||||
|
||||
/**
|
||||
* @brief Tic-Tac-Toe game implementation
|
||||
*
|
||||
* Classic two-player Tic-Tac-Toe game with:
|
||||
* - Touch input: Tap cells to place pieces
|
||||
* - Button input: KEY0 moves selection, KEY1 places piece
|
||||
* - Win detection: Rows, columns, and diagonals
|
||||
* - Statistics tracking: Wins, ties, total moves
|
||||
* - Visual feedback: Selection highlight, turn indicator
|
||||
*/
|
||||
class TicTacToeGame : public Game {
|
||||
public:
|
||||
/**
|
||||
* @brief Construct a new Tic-Tac-Toe game
|
||||
* @param width Display width in pixels
|
||||
* @param height Display height in pixels
|
||||
* @param renderer Pointer to low-level rendering interface
|
||||
* @param gui Pointer to GUI drawing primitives
|
||||
*/
|
||||
TicTacToeGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui);
|
||||
|
||||
/**
|
||||
* @brief Initialize game state (reset board, keep statistics)
|
||||
*/
|
||||
void init() override;
|
||||
|
||||
/**
|
||||
* @brief Update game state based on input event
|
||||
* @param event Input event from InputManager
|
||||
* @return true if screen redraw is needed
|
||||
*/
|
||||
bool update(const InputEvent& event) override;
|
||||
|
||||
/**
|
||||
* @brief Draw the game to the display buffer
|
||||
*/
|
||||
void draw() override;
|
||||
|
||||
private:
|
||||
// Game state
|
||||
struct GameState {
|
||||
uint8_t board[3][3]; // 0=empty, 1=X, 2=O
|
||||
uint8_t current_player; // 1=X, 2=O
|
||||
uint8_t winner; // 0=none, 1=X wins, 2=O wins, 3=tie
|
||||
uint8_t selected_row; // Currently selected cell (for button navigation)
|
||||
uint8_t selected_col;
|
||||
bool game_over;
|
||||
|
||||
// Game statistics
|
||||
uint32_t x_wins;
|
||||
uint32_t o_wins;
|
||||
uint32_t ties;
|
||||
uint32_t total_moves;
|
||||
} state;
|
||||
|
||||
/**
|
||||
* @brief Check if there's a winner on the board
|
||||
* @return 0=no winner, 1=X wins, 2=O wins, 3=tie
|
||||
*/
|
||||
uint8_t check_winner();
|
||||
|
||||
// Board layout constants
|
||||
static const int BOARD_SIZE = 200;
|
||||
static const int CELL_SIZE = BOARD_SIZE / 3;
|
||||
static const int BOARD_Y = 80; // Y position below title
|
||||
};
|
||||
|
||||
#endif // TIC_TAC_TOE_H
|
||||
Reference in New Issue
Block a user