Files
tactility_apps/Apps/Snake/main/Source/SnakeLogic.h
T
Shadowtrance 46cf00d92e Mystify Demo, TwoEleven updates & Snake (#21)
* **New Features**
  * Added Mystify screensaver demo with animated polygons and trails
  * Added Snake game with multiple difficulties, high-score persistence, and multi-input (touch/keyboard) support
  * Added CLI tool for building, packaging, and deploying apps (end-to-end build/install/run workflow)
  * Per-grid-size high-score persistence added to 2048 app; expanded keyboard controls (WASD and device-specific mappings)

* **Documentation**
  * Added Snake README with gameplay, controls, and usage instructions
2026-02-06 23:35:13 +01:00

98 lines
2.5 KiB
C

/**
* @file SnakeLogic.h
* @brief Pure game logic for the Snake game (no UI dependencies)
*/
#ifndef SNAKE_LOGIC_H
#define SNAKE_LOGIC_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "SnakeHelpers.h"
/***********************
* FUNCTION PROTOTYPES
**********************/
/**
* @brief Initialize the snake body as a linked list
* @param length Initial length of the snake
* @param start_x Starting x position (grid coordinate)
* @param start_y Starting y position (grid coordinate)
* @return Pointer to the head segment, or NULL on failure
*/
snake_segment_t* snake_init_body(uint16_t length, int16_t start_x, int16_t start_y);
/**
* @brief Free all memory used by the snake body
* @param head Pointer to the head segment
*/
void snake_free_body(snake_segment_t* head);
/**
* @brief Add a new segment to the tail of the snake
* @param head Pointer to the head segment
* @return true on success, false on allocation failure
*/
bool snake_grow(snake_segment_t* head);
/**
* @brief Move the snake one step in the current direction
* @param game Game state containing snake and direction
* @return true if move was successful, false if collision occurred
*/
bool snake_move(snake_game_t* game);
/**
* @brief Set the snake's next direction (with 180° reversal prevention)
* @param game Game state
* @param dir New direction
* @return true if direction was set, false if it would cause 180° reversal
*/
bool snake_set_direction(snake_game_t* game, snake_direction_t dir);
/**
* @brief Spawn food at a random location not occupied by snake
* @param game Game state
* @return true if food was placed, false if grid is full (win condition)
*/
bool snake_spawn_food(snake_game_t* game);
/**
* @brief Check if snake head collides with walls
* @param game Game state
* @return true if collision detected
*/
bool snake_check_wall_collision(snake_game_t* game);
/**
* @brief Check if snake head collides with its own body
* @param game Game state
* @return true if collision detected
*/
bool snake_check_self_collision(snake_game_t* game);
/**
* @brief Check if snake head collides with food
* @param game Game state
* @return true if collision detected
*/
bool snake_check_food_collision(snake_game_t* game);
/**
* @brief Count the number of segments in the snake
* @param head Pointer to the head segment
* @return Number of segments
*/
uint16_t snake_count_segments(snake_segment_t* head);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /*SNAKE_LOGIC_H*/