diff --git a/du4/snake.c b/du4/snake.c index 3c466f7..7038cdb 100644 --- a/du4/snake.c +++ b/du4/snake.c @@ -1,113 +1,23 @@ -#ifndef snake_h_INCLUDED -#define snake_h_INCLUDED +#include "snake.h" +#include -// Number of food items on the plane -#define FOOD_COUNT 5 +struct snake* add_snake(struct snake* snake,int x,int y){ + return NULL; +} -/** - * One part of the snake; - * - * The snake is a linked list; - */ - -struct snake { - // x position of the snake part - int x; - // y position of the snake part - int y; - // Pointer to the next snake part. - // The last part of the snake has NULL pointer to the next part. - struct snake* next; -}; +struct snake* remove_snake(struct snake* snake){ + return NULL; +} -// End game reason constants, return value of step_state -enum endgame { - // Continue the game - END_CONTINUE = 0, - // Snake hit a wall - END_WALL, - // Snake hit itself - END_SNAKE, - // No food left - END_FOOD, - // Other reason to end - END_USER -}; +void free_snake(struct snake* sn){ +} -/** - * State of the game. - * - * The state consists of the snake, its speed and food on the plane. - * - * The snake is a linked list of snake parts. - * - * Speed vector is a vector added to the last head position to create a new head. - * - * Food are points on the plane. Food with negative coordinates meads food is already eaten. - */ - -struct state { - // Snake as a linked list - struct snake* snake; - // X of the food positions - int foodx[FOOD_COUNT]; - // Y of the food positions - int foody[FOOD_COUNT]; - int sx; - int sy; - int width; - int height; -}; +int is_snake(struct snake* snake,int x,int y){ + return 0; +} -/** - * Add a new snake part with given position. The new snake part becomes the new head. - * - * @param head of the snake. - * @param x coordinate of the new head; - * @param y coordinate of the new head. - * @return new head of the snake. - */ -struct snake* add_snake(struct snake* snake,int x,int y); - -/** - * Remove the last snake part. - * The last snake part should always have NULL next pointer. - * - * @param head of the snake. - * @return new head of the snake. - */ -struct snake* remove_snake(struct snake* snake); - -/** - * Finds out if given coordinates are part of the snake. - * @param snake - * @param x coordinate to search in snake - * @param y coordinate to search in snake - * @return True, if there is a snake part with coordinates x,y. False otherwise - * - */ -int is_snake(struct snake* snake,int x, int y); -/** - * Remove and free each snake part; - * @param head of the snake. - */ -void free_snake(struct snake* sn); -/** - * Change game state. - * - * The function shoud calculate new posision of the snake head - * from the current position and speed vector. - * Then it should modify snake parst or food coordinates according to the rules: - * - * - If the new position is on the snake, end the game, return END_SNAKE. - * - If the new position is on the food, mark food as eaten - * (set its coordinates to -1) and add new snake part on the position of the food. If there is no food left, return END_FOOD. else return END_CONTINUE. - * - If the new position is on the plane, add new snake part on the new position and remove the last part of the snake, return END_CONTINUE. - * - * @param current state of the game - * @return reason to end the game according to enum endgame. - */ -int step_state(struct state* state); - - -#endif // snake_h_INCLUDED \ No newline at end of file +int step_state(struct state* st){ + int nx = (st->snake->x + st->sx); + int ny = (st->snake->y + st->sy); + return END_CONTINUE; +} diff --git a/du4/snake.h b/du4/snake.h new file mode 100644 index 0000000..3c466f7 --- /dev/null +++ b/du4/snake.h @@ -0,0 +1,113 @@ +#ifndef snake_h_INCLUDED +#define snake_h_INCLUDED + +// Number of food items on the plane +#define FOOD_COUNT 5 + +/** + * One part of the snake; + * + * The snake is a linked list; + */ + +struct snake { + // x position of the snake part + int x; + // y position of the snake part + int y; + // Pointer to the next snake part. + // The last part of the snake has NULL pointer to the next part. + struct snake* next; +}; + +// End game reason constants, return value of step_state +enum endgame { + // Continue the game + END_CONTINUE = 0, + // Snake hit a wall + END_WALL, + // Snake hit itself + END_SNAKE, + // No food left + END_FOOD, + // Other reason to end + END_USER +}; + +/** + * State of the game. + * + * The state consists of the snake, its speed and food on the plane. + * + * The snake is a linked list of snake parts. + * + * Speed vector is a vector added to the last head position to create a new head. + * + * Food are points on the plane. Food with negative coordinates meads food is already eaten. + */ + +struct state { + // Snake as a linked list + struct snake* snake; + // X of the food positions + int foodx[FOOD_COUNT]; + // Y of the food positions + int foody[FOOD_COUNT]; + int sx; + int sy; + int width; + int height; +}; + +/** + * Add a new snake part with given position. The new snake part becomes the new head. + * + * @param head of the snake. + * @param x coordinate of the new head; + * @param y coordinate of the new head. + * @return new head of the snake. + */ +struct snake* add_snake(struct snake* snake,int x,int y); + +/** + * Remove the last snake part. + * The last snake part should always have NULL next pointer. + * + * @param head of the snake. + * @return new head of the snake. + */ +struct snake* remove_snake(struct snake* snake); + +/** + * Finds out if given coordinates are part of the snake. + * @param snake + * @param x coordinate to search in snake + * @param y coordinate to search in snake + * @return True, if there is a snake part with coordinates x,y. False otherwise + * + */ +int is_snake(struct snake* snake,int x, int y); +/** + * Remove and free each snake part; + * @param head of the snake. + */ +void free_snake(struct snake* sn); +/** + * Change game state. + * + * The function shoud calculate new posision of the snake head + * from the current position and speed vector. + * Then it should modify snake parst or food coordinates according to the rules: + * + * - If the new position is on the snake, end the game, return END_SNAKE. + * - If the new position is on the food, mark food as eaten + * (set its coordinates to -1) and add new snake part on the position of the food. If there is no food left, return END_FOOD. else return END_CONTINUE. + * - If the new position is on the plane, add new snake part on the new position and remove the last part of the snake, return END_CONTINUE. + * + * @param current state of the game + * @return reason to end the game according to enum endgame. + */ +int step_state(struct state* state); + + +#endif // snake_h_INCLUDED \ No newline at end of file