From 9fa9b7bdbea4119b0f71b6fb2d3342be43ecaa60 Mon Sep 17 00:00:00 2001 From: Miloslav Macko Date: Mon, 15 Apr 2024 22:36:40 +0200 Subject: [PATCH] 123 --- a2/snake.c | 112 ----------------------------------------------------- 1 file changed, 112 deletions(-) diff --git a/a2/snake.c b/a2/snake.c index 0665fe7..0da9cca 100644 --- a/a2/snake.c +++ b/a2/snake.c @@ -1,26 +1,3 @@ -#include -#include -#include - -#define WIDTH 20 -#define HEIGHT 20 -#define FOOD_COUNT 3 - -enum EndGame { END_WALL, END_SNAKE, END_FOOD, END_CONTINUE }; - -struct snake { - int x, y; - struct snake* next; -}; - -struct state { - int width, height; - int sx, sy; - struct snake* snake; - int foodx[FOOD_COUNT]; - int foody[FOOD_COUNT]; -}; - struct snake* add_snake(struct snake* old_head, int x, int y) { struct snake* new_head = (struct snake*) malloc(sizeof(struct snake)); new_head->x = x; @@ -78,92 +55,3 @@ int step_state(struct state* state) { return END_CONTINUE; } - -void initialize(struct state* state) { - state->width = WIDTH; - state->height = HEIGHT; - state->sx = 1; - state->sy = 0; - state->snake = add_snake(NULL, 5, 5); - - for (int i = 0; i < FOOD_COUNT; i++) { - state->foodx[i] = rand() % state->width; - state->foody[i] = rand() % state->height; - } -} - -void render(struct state* state) { - system("cls"); - - for (int y = 0; y < state->height; y++) { - for (int x = 0; x < state->width; x++) { - if (is_snake(state->snake, x, y)) { - printf("* "); - } else { - int food = 0; - for (int i = 0; i < FOOD_COUNT; i++) { - if (state->foodx[i] == x && state->foody[i] == y) { - printf("o "); - food = 1; - break; - } - } - if (!food) printf(". "); - } - } - printf("\n"); - } -} - -void handle_input(struct state* state) { - if (_kbhit()) { - char key = _getch(); - switch (key) { - case 'w': - state->sx = 0; state->sy = -1; - break; - case 's': - state->sx = 0; state->sy = 1; - break; - case 'a': - state->sx = -1; state->sy = 0; - break; - case 'd': - state->sx = 1; state->sy = 0; - break; - case 'q': - exit(0); - break; - default: - break; - } - } -} - -void game_loop(struct state* state) { - while (1) { - render(state); - handle_input(state); - int result = step_state(state); - if (result == END_WALL || result == END_SNAKE) { - printf("Game Over!\n"); - break; - } else if (result == END_FOOD) { - printf("You ate all the food! You win!\n"); - break; - } - - } -} - -void cleanup(struct state* state) { - free_snake(state->snake); -} - -int main() { - struct state game_state; - initialize(&game_state); - game_loop(&game_state); - cleanup(&game_state); - return 0; -}