pvjc24/cv9/snake.c
2024-04-18 23:01:08 +02:00

73 lines
1.9 KiB
C

#include "snake.h"
#include <stdlib.h>
struct snake* add_snake(struct snake* snake,int x,int y){
struct snake* new_snake = (struct snake*)malloc(sizeof(struct snake));
if (new_snake == NULL) {
// Ak sa nepodarilo alokovať pamäť, vrátiť pôvodný zoznam hada
return snake;
}
// Inicializácia nového prvku súradnicami
new_snake->x = x;
new_snake->y = y;
// Pripojenie nového prvku na začiatok hada
new_snake->next = snake;
// Návrat nového začiatku hada (nového prvku)
return new_snake;
//return NULL;
}
struct snake* remove_snake(struct snake* snake){
// Ak je zoznam hada prázdny, vrátiť NULL
if (snake == NULL) {
return NULL;
}
// Ak máme iba jeden prvok, uvoľniť ho a vrátiť NULL
if (snake->next == NULL) {
free(snake);
return NULL;
}
// Prechádzanie zoznamu hada, kým nenájdeme predposledný prvok
struct snake* current = snake;
while (current->next->next != NULL) {
current = current->next;
}
// Uvoľnenie posledného prvku a nastavenie nového posledného prvku na NULL
free(current->next);
current->next = NULL;
// Vrátenie začiatku zoznamu hada
return snake;
//return NULL;
}
void free_snake(struct snake* sn){
}
int is_snake(struct snake* snake,int x,int y){
// Prechádzanie zoznamu hada
while (snake != NULL) {
// Ak sa súradnice zhodujú s polohou hada, vrátiť true
if (snake->x == x && snake->y == y) {
return 1;
}
// Posun na ďalší prvok hada
snake = snake->next;
}
// Ak sme prešli cez celý zoznam a nenájdený žiadny prvok s danými súradnicami, vrátiť false
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;
}