diff --git a/du7/snake.c b/du7/snake.c index 7caa28a..764b4c3 100644 --- a/du7/snake.c +++ b/du7/snake.c @@ -1,6 +1,6 @@ #include "snake.h" #include - +#include struct snake* add_snake(struct snake* snake, int x, int y) { struct snake* head = calloc(1, sizeof(struct snake)); head->x = x; @@ -44,8 +44,32 @@ int is_snake(struct snake* snake, int x, int y) { } return 0; } -int step_state(struct state* st){ - int nx = (st->snake->x + st->sx); +int step_state(struct state* st) { + int nx = (st->snake->x + st->sx); int ny = (st->snake->y + st->sy); + int count = 0; + if (nx < 0 || nx >= st->width || ny < 0 || ny >= st->height) { + return END_WALL; + } + if (is_snake(st->snake->next, nx, ny)) { + return END_SNAKE; + } + for (int i = 0; i < FOOD_COUNT; i++) { + if (nx == st->foodx[i] && ny == st->foody[i]) { + count++; + st->snake = add_snake(st->snake, nx, ny); + st->foodx[i] = -1; + st->foody[i] = -1; + if (count == FOOD_COUNT) { + return END_FOOD; + } + } + } + st->snake = add_snake(st->snake, nx, ny); + st->snake = remove_snake(st->snake); return END_CONTINUE; } + + + +