```c #include "snake.h" #include struct snake* add_snake(struct snake* snake, int x, int y) { // Allocate memory for the new snake part struct snake* new_part = (struct snake*)malloc(sizeof(struct snake)); if (new_part == NULL) { return NULL; // Memory allocation failed } // Set the coordinates of the new part new_part->x = x; new_part->y = y; // Set the next pointer of the new part to the current head of the snake new_part->next = snake; // Return the new head of the snake return new_part; } struct snake* remove_snake(struct snake* snake) { // Check if the snake is empty if (snake == NULL) { return NULL; // Snake is empty, no part to remove } // Save the next part of the snake struct snake* next_part = snake->next; // Free the current head of the snake free(snake); // Return the new head of the snake return next_part; } int is_snake(struct snake* snake, int x, int y) { // Traverse the snake while (snake != NULL) { // Check if the coordinates match if (snake->x == x && snake->y == y) { return 1; // Coordinates are part of the snake } // Move to the next part of the snake snake = snake->next; } // Coordinates are not part of the snake return 0; } void free_snake(struct snake* sn) { // Traverse the snake while (sn != NULL) { // Save the next part of the snake struct snake* next_part = sn->next; // Free the current part of the snake free(sn); // Move to the next part of the snake sn = next_part; } }