summaryrefslogtreecommitdiff
path: root/bsp/simulator/testdll/snake/snake.h
blob: 557d4d9241353b9b748a3e4b6d72f96c07d2dcd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef _SNAKE_H_
#define _SNAKE_H_

#include <rtthread.h>

#define snake_length_max                  20  //����߳�
#define snake_length_init                 3   //��ʼ���߳�
#define snake_room_size_hight             8   //���Ӹ� 0-255 ����>8
#define snake_room_size_widht             8   //���ӿ� 0-255 ����>8

#define snake_init_pointx               1
#define snake_init_pointy               2

typedef struct
{
    rt_int32_t x, y;
} point_t;

typedef struct
{
    rt_int32_t width;       // max x
    rt_int32_t height;      // max y
    rt_uint8_t *range;      // map, map->range[y * map->width + x]
    point_t snake_flush[2];
    point_t food_flush[1];
} map_t;

typedef enum
{
    SNAKE_DIR_UP,
    SNAKE_DIR_DOWN,
    SNAKE_DIR_LEFT,
    SNAKE_DIR_RIGHT
} SNAKE_DIR;

typedef enum
{
    FOOD,       // �Ե�ˮ��
    OVER,       // ҧ������
    NORMAL      // �����ж�
} SYS_STE;

typedef struct
{
    point_t body;
    rt_list_t list;
} snake_t;

// ����һ����ͼ
map_t *map_init(rt_uint32_t width, rt_uint32_t heigth);

// ����һ��ָ�����ȵ�����ָ����
rt_bool_t snake_init(const point_t *start, const int length, const SNAKE_DIR dir, map_t *map);

// �����ʳ��
rt_bool_t food_init(map_t *map, rt_uint32_t max_num);

void map_deinit(map_t *map);

void snake_deinit(void);

void food_deinit(void);

SYS_STE snake_step(SNAKE_DIR dir, map_t *map);

rt_bool_t snake_restart(const point_t *start, const int length, const SNAKE_DIR dir, map_t *map);

#endif