From 3d702f81b2872360ef62aeca92afa459e6ea5fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Dembick=C3=BD?= Date: Fri, 17 Apr 2026 06:53:30 +0000 Subject: [PATCH] =?UTF-8?q?P=C5=99idat=20du4/program.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- du4/program.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 du4/program.c diff --git a/du4/program.c b/du4/program.c new file mode 100644 index 0000000..25e5eab --- /dev/null +++ b/du4/program.c @@ -0,0 +1,66 @@ +#include "snake.h" +#include + +struct snake* add_snake(struct snake* snake, int x, int y){ + struct snake* head = malloc(sizeof(struct snake)); + head->x = x; + head->y = y; + head->next = snake; + return head; +} + +struct snake* remove_snake(struct snake* snake){ + if(snake == NULL) return NULL; + if(snake->next == NULL){ + free(snake); + return NULL; + } + struct snake* cur = snake; + while(cur->next->next != NULL) + cur = cur->next; + free(cur->next); + cur->next = NULL; + return snake; +} + +void free_snake(struct snake* sn){ + while(sn != NULL){ + struct snake* tmp = sn->next; + free(sn); + sn = tmp; + } +} + +int is_snake(struct snake* snake, int x, int y){ + while(snake != NULL){ + if(snake->x == x && snake->y == y) return 1; + snake = snake->next; + } + return 0; +} + +int step_state(struct state* st){ + int nx = st->snake->x + st->sx; + int ny = st->snake->y + st->sy; + + if(nx < 0 || nx >= st->width || ny < 0 || ny >= st->height) + return END_WALL; + + if(is_snake(st->snake, nx, ny)) + return END_SNAKE; + + for(int i = 0; i < FOOD_COUNT; i++){ + if(st->foodx[i] == nx && st->foody[i] == ny){ + st->snake = add_snake(st->snake, nx, ny); + st->foodx[i] = -1; + st->foody[i] = -1; + for(int j = 0; j < FOOD_COUNT; j++) + if(st->foodx[j] >= 0) return END_CONTINUE; + return END_FOOD; + } + } + + st->snake = add_snake(st->snake, nx, ny); + st->snake = remove_snake(st->snake); + return END_CONTINUE; +} \ No newline at end of file