diff --git a/a2/snake.c b/a2/snake.c new file mode 100644 index 0000000..b1843df --- /dev/null +++ b/a2/snake.c @@ -0,0 +1,58 @@ +#include "snake.h" +#include + +struct snake* add_snake(struct snake* snake,int x,int y){ + 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) { + 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) { + 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; +} + +int step_state(struct state* st){ + int nx = (st->snake->x + st->sx); + int ny = (st->snake->y + st->sy); + return END_CONTINUE; +}