Загрузил(а) файлы в 'du7'
This commit is contained in:
parent
2af40bf268
commit
907f8ccee9
133
du7/snake.c
Normal file
133
du7/snake.c
Normal file
@ -0,0 +1,133 @@
|
||||
#include "snake.h"
|
||||
#include <stdlib.h>
|
||||
struct snake* add_snake(struct snake* snake,int x,int y){
|
||||
struct snake* first_element = calloc(1,sizeof(struct snake));
|
||||
first_element->x = x;
|
||||
first_element->y = y;
|
||||
|
||||
first_element->next = snake;
|
||||
return first_element;
|
||||
}
|
||||
int is_snake(struct snake* snake,int x,int y){
|
||||
if(snake == NULL)
|
||||
return 0;
|
||||
struct snake* step_snake = snake;
|
||||
|
||||
while (step_snake->next != NULL)
|
||||
{
|
||||
if (step_snake->x == x && step_snake->y == y)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
step_snake = step_snake->next;
|
||||
}
|
||||
|
||||
if (step_snake->x == x && step_snake->y == y)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int step_state(struct state* st){
|
||||
struct snake* main_element = st->snake;
|
||||
//hlavu
|
||||
int root_x = st->snake->x;
|
||||
int nx = (st->snake->x + st->sx);
|
||||
int root_y = st->snake->y;
|
||||
int ny = (st->snake->y + st->sy);
|
||||
// pohybovať hlavou
|
||||
st->snake->y = ny;
|
||||
st->snake->x = nx;
|
||||
|
||||
st->snake = st->snake->next;
|
||||
while (st->snake->next != NULL)
|
||||
{
|
||||
//zmeniť na hodnotu ďalšieho prvku
|
||||
int step_prev_x = st->snake->x;
|
||||
int step_prev_y = st->snake->y;
|
||||
|
||||
st->snake->x = root_x;
|
||||
st->snake->y = root_y;
|
||||
|
||||
root_x = step_prev_x;
|
||||
root_y = step_prev_y;
|
||||
|
||||
st->snake = st->snake->next;
|
||||
}
|
||||
//zmeniť hodnotu posledného prvku
|
||||
st->snake->x = root_x;
|
||||
st->snake->y = root_y;
|
||||
|
||||
st->snake = main_element;
|
||||
|
||||
root_x = main_element->x;
|
||||
root_y = main_element->y;
|
||||
if (main_element->next != NULL){
|
||||
st->snake = main_element->next;
|
||||
}
|
||||
while (st->snake->next != NULL)
|
||||
{
|
||||
if (st->snake->x == root_x && st->snake->y == root_y)
|
||||
{
|
||||
free_snake(st->snake);
|
||||
free(main_element);//voľne alokované mamory (Pamätaj)
|
||||
return END_SNAKE;
|
||||
}
|
||||
st->snake = st->snake->next;
|
||||
}
|
||||
if (st->snake->x == root_x && st->snake->y == root_y)
|
||||
{
|
||||
free_snake(st->snake);
|
||||
free(main_element);
|
||||
|
||||
return END_SNAKE;
|
||||
}
|
||||
st->snake = main_element;
|
||||
int i = 0;
|
||||
while (i < FOOD_COUNT)
|
||||
{
|
||||
if (st->foodx[i] == st->snake->x && st->foody[i] == st->snake->y)
|
||||
{
|
||||
st->snake = add_snake(st->snake, st->foodx[i], st->foody[i]);
|
||||
//koordinovať -1
|
||||
st->foody[i] = -1;
|
||||
st->foodx[i] = -1;
|
||||
main_element = st->snake;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
int k =0;
|
||||
while(k < FOOD_COUNT)
|
||||
{
|
||||
if (st->foodx[k] != -1 && st->foody[k] != -1)
|
||||
return END_CONTINUE;
|
||||
k++;
|
||||
}
|
||||
|
||||
free(main_element);
|
||||
return END_FOOD;
|
||||
}
|
||||
|
||||
|
||||
void free_snake(struct snake* sn){
|
||||
if(sn != NULL){
|
||||
free(sn);
|
||||
}
|
||||
}
|
||||
struct snake* remove_snake(struct snake* snake){
|
||||
if(snake == NULL|| snake->next == NULL)
|
||||
return NULL;
|
||||
|
||||
struct snake* main_element = snake;
|
||||
struct snake* step_snake = snake;
|
||||
//cheak
|
||||
while (step_snake->next->next != NULL)
|
||||
{
|
||||
step_snake = step_snake->next;
|
||||
}
|
||||
step_snake->next = NULL;
|
||||
step_snake = main_element;
|
||||
return step_snake;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user