diff --git a/du7/snake.c b/du7/snake.c new file mode 100644 index 0000000..e937a56 --- /dev/null +++ b/du7/snake.c @@ -0,0 +1,112 @@ +#include "snake.h" +#include +#include + +//void freeAll(struct snake* prvok); + +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->next&&!snake) + return NULL; + + struct snake* last = snake; + struct snake* secondLast = snake; + + while(1){ + if(!last->next){ + free(last); + secondLast->next=NULL; + return snake; + } + secondLast=last; + last=last->next; + } +} + + +void free_snake(struct snake* sn){ + struct snake* this = sn; + + while(this){ + struct snake* next = this->next; + free(this); + this = next; + } +} + +/* +void freeAll(struct snake* prvok){ + if(!prvok) + break; + + else if(prvok->next) + freeAll(prvok->next); + + free(prvok); +}*/ + + +int is_snake(struct snake* snake,int x,int y){ + + struct snake* this = snake; + + while(this){ + if(this->x==x && this->y==y) + return 1; + + this = this->next; + } + return 0; +} +//Spojkový zoznam =============================> celá hra + + +int step_state(struct state* st){ + + int nx = (st->snake->x + st->sx); + int ny = (st->snake->y + st->sy); + + if(is_snake(st->snake,nx, ny)) + return END_SNAKE; +// + for(int i = 0;i < FOOD_COUNT; i++){ + if(nx==st->foodx[i]&&ny==st->foody[i]){ + st->foody[i]=-1; + st->foodx[i]=-1; + + add_snake(st->snake, nx, ny); + } + } + + int is_all_eaten=1; + for(int i = 0;i < FOOD_COUNT; i++){ + if(st->foodx[i]>=0){ + is_all_eaten = 0; + break; + } + } + + if(is_all_eaten) + return END_FOOD; +// + + if(nx<0||ny<0||nx>=COLS||ny>=LINES) + return END_WALL; +// + + if(st->snake->x != nx && st->snake->y != ny){ + remove_snake(st->snake); + add_snake(st->snake, nx, ny); + } + + return END_CONTINUE; +}