-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsnake.c
74 lines (65 loc) · 1.56 KB
/
snake.c
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
69
70
71
72
73
74
#include "sna.h"
int game_start()
{
snake_obj *obj_s = init_snake();
draw_obj *obj_d = init_draw();
scenes_obj *obj_c = init_scenes();
int food = 0;
while(obj_s->life_f(obj_s, 1))
{
obj_d->write(obj_d, obj_c->wall(obj_c), '#');
while (obj_d->read(obj_d, *(obj_c->food(obj_c, food))) != ' ');
obj_d->write(obj_d, obj_c->food(obj_c, food), '*');
obj_d->write(obj_d, obj_s->head(obj_s), '@');
food = obj_s->mobile(obj_s, obj_d->read(obj_d, obj_s->front(obj_s)));
obj_d->print(obj_d, obj_s->score);
os_sleep(70);
}
return 0;
}
int mobile_impl(snake_obj *obj, int ch)
{
if(ch == ' ')
obj->body_head = update(obj->body_head, obj->dir);
else if(ch == '*')
{
addnode(&obj->body_head, obj->dir);
obj->length++;
obj->score++;
return 0;
}
else
obj->life_f(obj, 0);
return 1;
}
int life_impl(snake_obj *obj, int n)
{
return (n)?obj->life:(obj->life = 0);
}
node front_impl(snake_obj *obj)
{
switch(os_keyboard())
{
case UP:
obj->dir = *(obj->body_head);
obj->dir.y--;
break;
case DOWN:
obj->dir = *(obj->body_head);
obj->dir.y++;
break;
case LEFT:
obj->dir = *(obj->body_head);
obj->dir.x--;
break;
case RIGHT:
obj->dir = *(obj->body_head);
obj->dir.x++;
break;
}
return obj->dir;
}
node *head_impl(snake_obj *obj)
{
return obj->body_head;
}