snake.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef _SNAKE_H_
  2. #define _SNAKE_H_
  3. #include <rtthread.h>
  4. #define snake_length_max 20 //最大蛇长
  5. #define snake_length_init 3 //初始化蛇长
  6. #define snake_room_size_hight 8 //房子高 0-255 建议>8
  7. #define snake_room_size_widht 8 //房子宽 0-255 建议>8
  8. #define snake_init_pointx 1
  9. #define snake_init_pointy 2
  10. typedef struct
  11. {
  12. rt_int32_t x, y;
  13. } point_t;
  14. typedef struct
  15. {
  16. rt_int32_t width; // max x
  17. rt_int32_t height; // max y
  18. rt_uint8_t *range; // map, map->range[y * map->width + x]
  19. point_t snake_flush[2];
  20. point_t food_flush[1];
  21. } map_t;
  22. typedef enum
  23. {
  24. SNAKE_DIR_UP,
  25. SNAKE_DIR_DOWN,
  26. SNAKE_DIR_LEFT,
  27. SNAKE_DIR_RIGHT
  28. } SNAKE_DIR;
  29. typedef enum
  30. {
  31. FOOD, // 吃到水果
  32. OVER, // 咬到自身
  33. NORMAL // 正常行动
  34. } SYS_STE;
  35. typedef struct
  36. {
  37. point_t body;
  38. rt_list_t list;
  39. } snake_t;
  40. // 构造一个地图
  41. map_t *map_init(rt_uint32_t width, rt_uint32_t heigth);
  42. // 构造一条指定长度的蛇在指定点
  43. rt_bool_t snake_init(const point_t *start, const int length, const SNAKE_DIR dir, map_t *map);
  44. // 构造出食物
  45. rt_bool_t food_init(map_t *map, rt_uint32_t max_num);
  46. void map_deinit(map_t *map);
  47. void snake_deinit(void);
  48. void food_deinit(void);
  49. SYS_STE snake_step(SNAKE_DIR dir, map_t *map);
  50. rt_bool_t snake_restart(const point_t *start, const int length, const SNAKE_DIR dir, map_t *map);
  51. #endif