diff --git a/cv9/snake/snake.c b/cv9/snake/snake.c index 7038cdb..b1843df 100644 --- a/cv9/snake/snake.c +++ b/cv9/snake/snake.c @@ -2,17 +2,52 @@ #include struct snake* add_snake(struct snake* snake,int x,int y){ - return NULL; + struct snake* head = calloc(1,sizeof(struct snake)); + head->x = x; + head->y = y; + head->next = snake; + return head; } -struct snake* remove_snake(struct snake* snake){ - return NULL; +struct snake* remove_snake(struct snake* snake) { + if (snake == NULL) { + return NULL; + } + + if (snake->next == NULL) { + free(snake); + return NULL; + } + + struct snake* current = snake; + while (current->next->next != NULL) { + current = current->next; + } + + free(current->next); + current->next = NULL; + + return snake; } -void free_snake(struct snake* sn){ +void free_snake(struct snake* sn) { + struct snake* current = sn; + struct snake* next; + + while (current!= NULL) { + next = current->next; + free(current); + current = next; + } } 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; }