From d53e2de57024bcac492bfa0d4ac2e96dcba1a22d Mon Sep 17 00:00:00 2001 From: Vladyslav Korzun Date: Fri, 21 Apr 2023 08:15:16 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'du7/snake.c'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- du7/snake.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) 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; } + + + +