From 6b0e85806424e6e6b7bb6aca3b1ee8aee6497cdc Mon Sep 17 00:00:00 2001 From: Jeroen Boxhoorn Date: Sat, 18 Oct 2025 18:56:28 +0200 Subject: [PATCH] General refactor and minor improvements --- Makefile | 4 +- assets/handleiding.txt | 44 ++++--- rooster.c => grid.c | 164 +++++++++++++------------- grid.h | 174 +++++++++++++++++++++++++++ grid_game_engine.c | 64 +++++----- grid_game_engine.h | 42 ++++++- manual.c | 18 +-- maze_runner.c | 100 +++++++++------- minigame_menu.c | 25 ++-- rooster.h | 177 ---------------------------- snake.c | 262 ++++++++++++++++++++++++++++------------- spel | Bin 167248 -> 172024 bytes spel.c | 8 +- 13 files changed, 616 insertions(+), 466 deletions(-) rename rooster.c => grid.c (52%) create mode 100644 grid.h delete mode 100644 rooster.h diff --git a/Makefile b/Makefile index 3ec11c4..878f8f9 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC = gcc -CFLAGS = -std=c11 -Wextra -Wpedantic -g3 -fsanitize=address +CFLAGS = -std=c11 -Wextra -Wpedantic -pthread -g3 -fsanitize=address LDFLAGS = -lncurses -fsanitize=address SRC = $(filter-out voorbeeld.c,$(wildcard *.c)) HEADERS = $(wildcard *.h) @@ -17,7 +17,7 @@ voorbeeld: tarball1: deel1.tar.gz tarball2: deel2.tar.gz -deel1.tar.gz: spel.c rooster.h rooster.c Makefile +deel1.tar.gz: spel.c grid.h grid.c Makefile tar czf $@ $^ deel2.tar.gz: $(SRC) $(HEADERS) Makefile diff --git a/assets/handleiding.txt b/assets/handleiding.txt index 8e81adc..55b9df2 100644 --- a/assets/handleiding.txt +++ b/assets/handleiding.txt @@ -2,17 +2,40 @@ | | | !!! HOWTO MINIGAME !!! | | | +| Make sure that your terminal | +| has enough space to display | +| all the output of the game. | +| | +| This can be achieved by | +| going fullscreen and/or | +| zooming out. | +| | | *________________* | -| |--- MANUAL ---| | +| | GENERAL | | | *------------------------------------* | | | | | -| | Exit: | | +| | Exit current screen: | | | | Escape, backspace | | | | | | +| | Reset zoom: | | +| | "'ctrl' + '0'" | | +| | | | +| | Zoom out: | | +| | "'ctrl' + '-'" | | +| | | | +| | Zoom in: | | +| | "'ctrl' + '+'" | | +| | "'ctrl' + 'shift' + '='" | | +| | | | | *------------------------------------* | | | +| "'ctrl' + '-'" | +| | +| You can reset the zoom with: | +| "'ctrl' + '0'" | +| | | *________________* | -| |---- MENU ----| | +| | MENU | | | *------------------------------------* | | | | | | | Move down: | | @@ -24,13 +47,10 @@ | | Select: | | | | 'f', enter, space bar | | | | | | -| | Exit: | | -| | Escape, backspace | | -| | | | | *------------------------------------* | | | | *-----------------* | -| |- MAZE RUNNER -| | +| | MAZE RUNNER | | | *------------------------------------* | | | | | | | Move up: | | @@ -45,13 +65,10 @@ | | Move left: | | | | 'a', arrow_left | | | | | | -| | Exit: | | -| | Escape, backspace | | -| | | | | *------------------------------------* | | | | *-----------------* | -| |---- SNAKE ----| | +| | SNAKE | | | *------------------------------------* | | | | | | | Turn up: | | @@ -66,10 +83,5 @@ | | Turn left: | | | | 'a', arrow_left | | | | | | -| | Exit: | | -| | Escape, backspace | | -| | | | | *------------------------------------* | *--------------------------------------------* -1234567890123456789012345678901234567890123456 - 10 20 30 40 | diff --git a/rooster.c b/grid.c similarity index 52% rename from rooster.c rename to grid.c index 5b59deb..2224b50 100644 --- a/rooster.c +++ b/grid.c @@ -1,20 +1,24 @@ -#include "rooster.h" +#include "grid.h" #include #include #include /* - * The rooster type this program is build around. + * The grid type this program is build around. */ -typedef struct rooster_data { +typedef struct grid_data { char *rost; int height; int width; - toestand state; -} rooster; + state state; +} grid; -rooster *grid_from_string(const char* input) { +static int internal_location(const grid *gp, const int x, const int y) { + return y * (gp->width + 1) + x; +} + +grid *grid_create_from_string(const char* input) { int width = 0; int height = 0; const size_t len = strlen(input) / sizeof(char); @@ -38,20 +42,20 @@ rooster *grid_from_string(const char* input) { const int grid_size = (width + 1) * height + 1; - rooster *rp = malloc(sizeof(rooster)); + grid *gp = malloc(sizeof(grid)); - if (rp == NULL) { + if (gp == NULL) { return NULL; } - rp->rost = malloc(grid_size * sizeof(char)); - rp->height = height; - rp->width = width; - rp->state = STATE_BEGIN; + gp->rost = malloc(grid_size * sizeof(char)); + gp->height = height; + gp->width = width; + gp->state = STATE_BEGIN; - strcpy(rp->rost, input); + strcpy(gp->rost, input); - return rp; + return gp; } /* @@ -59,16 +63,16 @@ rooster *grid_from_string(const char* input) { * * Input: * fh: the stream to read the grid from. - * rost: a rooster file to store the width and height in. + * rost: a grid file to store the width and height in. * * Side effects: - * the rooster gets its width and height set + * the grid gets its width and height set * * Output: * 1 if the file width and height seem to match with its size * 0 otherwise */ -static int get_grid_sizes(FILE *fh, rooster *rost) { +static int get_grid_sizes(FILE *fh, grid *rost) { while (getc(fh) != '\n') { if (feof(fh)) { return 0; @@ -94,19 +98,19 @@ static int get_grid_sizes(FILE *fh, rooster *rost) { return 1; } -rooster *grid_from_file(FILE *fh) { +grid *grid_create_from_file(FILE *fh) { if (fh == NULL) { return NULL; } - rooster rost = { + grid rost = { NULL, 0, 0, STATE_BEGIN }; - // Sets the width and height of the rooster. + // Sets the width and height of the grid. if (get_grid_sizes(fh, &rost) != 1) { // Unlogical file structure. return NULL; @@ -147,76 +151,72 @@ rooster *grid_from_file(FILE *fh) { free(line); - rooster *return_rooster = malloc(sizeof(rost)); - if (return_rooster == NULL) { + grid *return_grid = malloc(sizeof(rost)); + if (return_grid == NULL) { return NULL; } - memcpy(return_rooster, &rost, sizeof(rost)); + memcpy(return_grid, &rost, sizeof(rost)); - return return_rooster; + return return_grid; } -toestand rooster_vraag_toestand(const rooster *rp) { - if (rp != NULL) { - return rp->state; +state grid_fetch_state(const grid *gp) { + if (gp != NULL) { + return gp->state; } return STATE_VERLOREN; } -void rooster_zet_toestand(rooster *rp, toestand t) { - if (rp != NULL) { +void grid_put_state(grid *gp, const state t) { + if (gp != NULL) { switch (t) { case STATE_BEGIN: - rp->state = STATE_BEGIN; + gp->state = STATE_BEGIN; break; case STATE_AAN_HET_SPELEN: - rp->state = STATE_AAN_HET_SPELEN; + gp->state = STATE_AAN_HET_SPELEN; break; case STATE_GEWONNEN: - rp->state = STATE_GEWONNEN; + gp->state = STATE_GEWONNEN; break; case STATE_VERLOREN: - rp->state = STATE_VERLOREN; + gp->state = STATE_VERLOREN; break; case STATE_QUIT: - rp->state = STATE_QUIT; + gp->state = STATE_QUIT; break; } } } -void rooster_klaar(rooster *rp) { - if (rp != NULL) { - if (rp->rost != NULL) +void grid_cleanup(grid *gp) { + if (gp != NULL) { + if (gp->rost != NULL) { - free(rp->rost); + free(gp->rost); } - free(rp); + free(gp); } } -int rooster_breedte(const rooster *rp) { - if (rp == NULL) { +int grid_width(const grid *gp) { + if (gp == NULL) { return 0; } - return rp->width; + return gp->width; } -int rooster_hoogte(const rooster *rp) { - if (rp == NULL) { +int grid_height(const grid *gp) { + if (gp == NULL) { return 0; } - return rp->height; + return gp->height; } -static int internal_location(const rooster *rp, const int x, const int y) { - return y * (rp->width + 1) + x; -} - -int rooster_bevat(const rooster *rp, int x, int y) { - if (rp != NULL && rp->rost != NULL) { - if (x >= 0 && y >= 0 && x < rp->width && y < rp->height) +int grid_contains(const grid *gp, const int x, const int y) { + if (gp != NULL && gp->rost != NULL) { + if (x >= 0 && y >= 0 && x < gp->width && y < gp->height) { return 1; } @@ -224,58 +224,58 @@ int rooster_bevat(const rooster *rp, int x, int y) { return 0; } -char rooster_kijk(const rooster *rp, int x, int y) { - if (rp != NULL && rp->rost != NULL && rooster_bevat(rp, x, y) == 1) { - return rp->rost[internal_location(rp, x, y)]; +char grid_fetch(const grid *gp, const int x, const int y) { + if (gp != NULL && gp->rost != NULL && grid_contains(gp, x, y) == 1) { + return gp->rost[internal_location(gp, x, y)]; } return '\0'; } -int rooster_plaats(rooster *rp, int x, int y, char c) { - if (rp != NULL && rp->rost != NULL && rooster_bevat(rp, x, y) == 1) { - rp->rost[internal_location(rp, x, y)] = c; +int grid_put(grid *gp, const int x, const int y, const char c) { + if (gp != NULL && gp->rost != NULL && grid_contains(gp, x, y) == 1) { + gp->rost[internal_location(gp, x, y)] = c; return 1; } return 0; } -char *rooster_vraag_rij(const rooster *rp, int y) { - if (rp != NULL && rp->rost != NULL && rooster_bevat(rp, 0, y) == 1) { +char *grid_fetch_row(const grid *gp, const int y) { + if (gp != NULL && gp->rost != NULL && grid_contains(gp, 0, y) == 1) { // we're going to remove the newline so this is long enough - char *row = malloc((rp->width + 1) * sizeof(char)); - memcpy(row, &rp->rost[internal_location(rp, 0, y)], rp->width * sizeof(char)); - row[rp->width] = '\0'; + char *row = malloc((gp->width + 1) * sizeof(char)); + memcpy(row, &gp->rost[internal_location(gp, 0, y)], gp->width * sizeof(char)); + row[gp->width] = '\0'; return row; } return NULL; } -rooster *rooster_kopieer(const rooster *rp) { - if (rp != NULL && rp->rost != NULL) { - const size_t grid_memory = ((rp->width + 1) * rp->height + 1) * sizeof(char); +grid *grid_copy(const grid *gp) { + if (gp != NULL && gp->rost != NULL) { + const size_t grid_memory = ((gp->width + 1) * gp->height + 1) * sizeof(char); - char *grid = malloc(grid_memory); - if (grid == NULL) { + char *rost = malloc(grid_memory); + if (rost == NULL) { return NULL; } - rooster *new_rooster = malloc(sizeof(*rp)); - if (new_rooster == NULL) { - return NULL; - } + grid *new_grid = malloc(sizeof(*gp)); + if (new_grid == NULL) { + return NULL; + } - memcpy(grid, rp->rost, grid_memory); + memcpy(rost, gp->rost, grid_memory); - memcpy(new_rooster, rp, sizeof(*rp)); + memcpy(new_grid, gp, sizeof(*gp)); - new_rooster->rost = grid; - return new_rooster; + new_grid->rost = rost; + return new_grid; } return NULL; } -void rooster_zoek(const rooster *rp, char c, int *x, int *y) { - if (rp == NULL || rp->rost == NULL) { +void grid_find(const grid *gp, const char c, int *x, int *y) { + if (gp == NULL || gp->rost == NULL) { *x = -1; *y = -1; return; @@ -283,15 +283,15 @@ void rooster_zoek(const rooster *rp, char c, int *x, int *y) { const char search[2] = {c}; - int strpos = strcspn(rp->rost, search); + const int char_index = (int)strcspn(gp->rost, search); - if (rp->rost[strpos] == '\0') + if (gp->rost[char_index] == '\0') { *x = -1; *y = -1; return; } - *x = strpos % (rp->width + 1); - *y = strpos / (rp->width + 1); + *x = char_index % (gp->width + 1); + *y = char_index / (gp->width + 1); } diff --git a/grid.h b/grid.h new file mode 100644 index 0000000..5dd800a --- /dev/null +++ b/grid.h @@ -0,0 +1,174 @@ +/* + * grid.h + * + * This module provides a grid api. + * + * A grid is a rectangular grid of objects. Every object in this grid is a char. + */ + +#ifndef _GRID_H +#define _GRID_H + +#include + + +struct grid_data; +typedef struct grid_data grid; + +typedef enum { + STATE_BEGIN, + STATE_AAN_HET_SPELEN, + STATE_GEWONNEN, + STATE_VERLOREN, + STATE_QUIT +} state; + +/* Maak een rooster op basis van de data in de gegeven stream. + * + * fh: de stream waaruit het doolhof gelezen moet worden. + * + * Uitvoer: als alles goed gaat, een pointer naar een rooster (die op de heap is + * gealloceerd), dat overeenkomt met de gegeven beschrijving. + * De begintoestand is BEGIN. + * + * Als de beschrijving niet consistent is (bijvoorbeeld + * niet alle rijen zijn even lang, of er klopt iets anders niet), of + * als niet voldoende geheugen kan worden gereserveerd, dan wordt + * NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen + * achter.) + */ +grid *grid_create_from_file(FILE *fh); + +/* + * Maak een rooster op basis van een gegeven string. + * + * Uitvoer: als alles goed gaat, een pointer naar een rooster (die op de heap is + * gealloceerd), dat overeenkomt met de gegeven beschrijving. + * De begintoestand is BEGIN. + * + * Als de beschrijving niet consistent is (bijvoorbeeld + * niet alle rijen zijn even lang, of er klopt iets anders niet), of + * als niet voldoende geheugen kan worden gereserveerd, dan wordt + * NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen + * achter.) + */ +grid *grid_create_from_string(const char* input); + +/* + * Haal een rij uit het rooster op. + * + * Input: + * gp: een pointer naar het rooster + * y: de y-coordinaat van de rij die je wilt hebben. + * + * Output: + * Een pointer naar een nieuwe string met daarin alle karakters in die rij. + */ +char *grid_fetch_row(const grid *gp, int y); + +/* + * Maak een kopie van een rooster + * + * Input: + * gp: Een pointer naar het rooster. + * + * Output: + * Een pointer naar het kopie. + */ +grid *grid_copy(const grid *gp); + +/* Vraag de huidige toestand van het spel op. + * + * Input: + * gp: een pointer naar het rooster. + * + * Uitvoer: de toestand. + */ +state grid_fetch_state(const grid *gp); + + +/* Verander de huidige toestand van het spel. + * + * gp: een pointer naar het rooster. + * t: de nieuwe toestand. + */ +void grid_put_state(grid *gp, state t); + + +/* Geef alle resources vrij die zijn gealloceerd voor een rooster. + * De rooster pointer is na aanroep van deze functie niet meer bruikbaar. + * + * gp: een pointer naar het rooster. + */ +void grid_cleanup(grid *gp); + + +/* Vraag de breedte van het rooster op, dat wil zeggen, het aantal kolommen. + * + * gp: een pointer naar het rooster. + * + * Uitvoer: de breedte. + */ +int grid_width(const grid *gp); + + +/* Vraag de hoogte van het rooster op, dat wil zeggen, het aantal rijen. + * + * gp: een pointer naar het rooster. + * + * Uitvoer: de hoogte. + */ +int grid_height(const grid *gp); + + +/* Kijk of de gegeven positie binnen het rooster valt. + * + * gp: een pointer naar het rooster. + * x,y: de positie. + * + * Uitvoer: 1 als de positie binnen het rooster valt, anders 0. + */ +int grid_contains(const grid *gp, int x, int y); + + +/* Kijk welk object er staat op een bepaalde positie in het rooster. + * + * gp : een pointer naar het rooster + * x,y: de betreffende positie. + * + * Uitvoer: het object op die positie, of '\0' als de positie buiten het + * rooster valt. + */ +char grid_fetch(const grid *gp, int x, int y); + + +/* Schrijf een bepaald object op een bepaalde positie in het rooster. + * + * gp : een pointer naar het rooster + * x,y: de betreffende positie. + * c : het object. + * + * Effect: als (x,y) binnen het rooster ligt, wordt het object op + * de opgegeven positie geplaatst, anders verandert er niets. + * + * Uitvoer: 1 als het object is geplaatst, of 0 als het buiten de grenzen lag. + */ +int grid_put(grid *gp, int x, int y, char c); + + +/* Zoek een bepaald object in het rooster, en geef de coordinaten van het + * object terug via de gegeven pointers. Let op: als er meerdere objecten van + * het gezochte soort in het rooster voorkomen, is niet gedefinieerd van welke + * de positie wordt gevonden. + * + * gp : een pointer naar het rooster + * c : het object dat moet worden gezocht + * x,y: pointers naar de geheugenlocaties waar de gevonden positie moet worden + * geschreven. + * + * Uitvoer: via de pointers x en y. Als het object niet wordt gevonden worden + * *x en *y op -1 gezet. + */ +void grid_find(const grid *gp, char c, int *x, int *y); + +#endif //_GRID_H diff --git a/grid_game_engine.c b/grid_game_engine.c index 9f1401b..82958d0 100644 --- a/grid_game_engine.c +++ b/grid_game_engine.c @@ -10,8 +10,6 @@ #include #include -#include "rooster.h" - int same_coordinate(const coordinate a, const coordinate b) { return a.x == b.x && a.y == b.y; } @@ -24,23 +22,23 @@ int modulo(const int number, const int mod) { return result; } -void show_grid_on_offset(const rooster *gp, const int starting_x, const int starting_y) { - const int height = rooster_hoogte(gp); +void show_grid_on_offset(const grid *gp, const int starting_x, const int starting_y) { + const int height = grid_height(gp); for (int y = 0; y < height; y++) { - char *rij = rooster_vraag_rij(gp, y); + char *rij = grid_fetch_row(gp, y); mvprintw(starting_y + y, starting_x, "%s", rij); free(rij); } refresh(); } -void show_grid(const rooster *gp) { +void show_grid(const grid *gp) { show_grid_on_offset(gp, 0, 0); } -void update_grid(rooster *gp, const char c, const int x, const int y) { - if (rooster_plaats(gp, x, y, c) == 1) { +void update_grid(grid *gp, const char c, const int x, const int y) { + if (grid_put(gp, x, y, c) == 1) { mvaddch(y, x, c); } } @@ -52,9 +50,7 @@ void update_grid(rooster *gp, const char c, const int x, const int y) { * Clears the console and prints the victory message. */ static void display_victory(const coordinate location) { - erase(); - mvprintw(location.y, location.x, "YOU WON!!!!!"); - refresh(); + mvaddstr(location.y, location.x, "YOU WON!!!!!"); } /* @@ -64,9 +60,7 @@ static void display_victory(const coordinate location) { * Clears the console and prints the GAME OVER message. */ static void display_loss(const coordinate location) { - erase(); - mvprintw(location.y, location.x, "GAME OVER"); - refresh(); + mvaddstr(location.y, location.x, "GAME OVER"); } /* @@ -76,9 +70,7 @@ static void display_loss(const coordinate location) { * Clears the console and prints the quit message. */ static void display_quit(const coordinate location) { - erase(); - mvprintw(location.y, location.x, "You quit the game"); - refresh(); + mvaddstr(location.y, location.x, "You quit the game"); } /* @@ -88,15 +80,15 @@ static void display_quit(const coordinate location) { * Clears the console and prints the hacker man message. */ static void display_hackerman(const coordinate location) { - erase(); - mvprintw(location.y, location.x, "The hacker man strikes again..."); - refresh(); + mvaddstr(location.y, location.x, "The hacker man strikes again..."); } void graceful_exit(const coordinate message_location) { - mvprintw(message_location.y, message_location.x, "Press ENTER or SPACE to exit."); + mvaddstr(message_location.y, message_location.x, "Press ENTER or SPACE to exit."); while (1) { switch (getch()) { + case KEY_BACKSPACE: + case KEY_ESCAPE: case KEY_ENTER: case '\n': case ' ': @@ -105,8 +97,8 @@ void graceful_exit(const coordinate message_location) { } } -void game_exit_screen(const rooster *gp, coordinate location) { - const toestand current_state = rooster_vraag_toestand(gp); +void game_exit_message(const grid *gp, coordinate location) { + const state current_state = grid_fetch_state(gp); switch (current_state) { case STATE_GEWONNEN: display_victory(location); @@ -123,9 +115,24 @@ void game_exit_screen(const rooster *gp, coordinate location) { location.y += 2; graceful_exit(location); + refresh(); } -static void init_ncurses() { +void enable_highlight(const game_colors color) { + attron(COLOR_PAIR(color)); +} + +void disable_highlight(const game_colors color) { + attroff(COLOR_PAIR(color)); +} + +/* + * Initialize ncurses. + * + * This enables cbreak, noecho, hides the cursor and enables the extra keys. + * This also creates the color pairs needed for game_colors and sets ESCDELAY to 0. + */ +static void init_ncurses(void) { ESCDELAY = 0; setlocale(LC_ALL, ""); initscr(); @@ -134,9 +141,6 @@ static void init_ncurses() { noecho(); // Don't write the keyboard input to the console. curs_set(0); // Hides the cursor. - // mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, NULL); // Don't mask any mouse events - // printf("\033[?1003h\n"); // Makes the terminal report mouse movement events - start_color(); init_pair(BLACK, COLOR_BLACK, COLOR_BLACK); init_pair(WHITE, COLOR_BLACK, COLOR_WHITE); @@ -150,14 +154,10 @@ static void init_ncurses() { clear(); } -static void cleanup_ncurses() { - endwin(); -} - void init_engine(void) { init_ncurses(); } void cleanup_engine(void) { - cleanup_ncurses(); + endwin(); } diff --git a/grid_game_engine.h b/grid_game_engine.h index 988c574..713e90f 100644 --- a/grid_game_engine.h +++ b/grid_game_engine.h @@ -9,7 +9,7 @@ #ifndef MINIGAME_MENU_GRID_GAME_ENGINE_H #define MINIGAME_MENU_GRID_GAME_ENGINE_H -#include "rooster.h" +#include "grid.h" #define KEY_ESCAPE 27 @@ -32,7 +32,7 @@ typedef enum { typedef struct { char name[100]; - rooster *game_map; + grid *game_map; } game_maps; /* @@ -63,7 +63,7 @@ int modulo(int number, int mod); * Side effect: * The console is cleared and the grid is printed. */ -void show_grid_on_offset(const rooster *gp, int starting_x, int starting_y); +void show_grid_on_offset(const grid *gp, int starting_x, int starting_y); /* * Displays the given grid with ncurses. @@ -74,7 +74,37 @@ void show_grid_on_offset(const rooster *gp, int starting_x, int starting_y); * Side effect: * The console is cleared and the grid is printed. */ -void show_grid(const rooster *gp); +void show_grid(const grid *gp); + +/* + * Turn on color highlighting for ncurses + * + * Input: + * color: The color you want the highlight to be. + * + * Side Effects: + * Enables color highlighting in ncurses. + * + * Note: + * This should always be disabled with disable_highlights before being called again. + * Not disabling the current highlight before enabling another one is undefined behaviour. + */ +void enable_highlight(game_colors color); + +/* + * Turn off color highlighting for ncurses + * + * Input: + * color: The color highlighting you want to turn off. +* + * Side Effects: + * Enables color highlighting in ncurses. + * + * Note: + * This should always be enabled with enable_highlights before being called. + * Disabling the highlight before enabling it is undefined behaviour. + */ +void disable_highlight(game_colors color); /* * Updates a single location in the grid. @@ -88,7 +118,7 @@ void show_grid(const rooster *gp); * Side effect: * The update gets applied both on the grid and on the screen. */ -void update_grid(rooster *gp, char c, int x, int y); +void update_grid(grid *gp, char c, int x, int y); /* * Display the ending screen that matches the end state of the grid. @@ -100,7 +130,7 @@ void update_grid(rooster *gp, char c, int x, int y); * Side Effects: * The end of game screen gets displayed with a graceful exit. */ -void game_exit_screen(const rooster *gp, coordinate location); +void game_exit_message(const grid *gp, coordinate location); /* * Waits for you to press ENTER or SPACE before exiting the game. diff --git a/manual.c b/manual.c index 0655140..63cab11 100644 --- a/manual.c +++ b/manual.c @@ -5,8 +5,7 @@ #include "manual.h" #include - -#include "rooster.h" +#include "grid_game_engine.h" void manual(const coordinate display_location) { erase(); @@ -15,19 +14,22 @@ void manual(const coordinate display_location) { return; } - rooster *grid = grid_from_file(fp); + grid *grid = grid_create_from_file(fp); if (grid == NULL) { mvaddstr(display_location.y, display_location.x, "Error loading grid"); return; } fclose(fp); + show_grid_on_offset(grid, display_location.x, display_location.y); - rooster_klaar(grid); - - int ch = getch(); - while (ch != KEY_ESCAPE && ch != KEY_BACKSPACE && ch != ' ') { - ch = getch(); + // Wait until ESCAPE or BACKSPACE is pressed. + timeout(200); + for (int ch = getch(); ch != KEY_ESCAPE && ch != KEY_BACKSPACE && ch != ' '; ch = getch()) { + // Update the screen in the meantime to accommodate windows resizes. + show_grid_on_offset(grid, display_location.x, display_location.y); } + + grid_cleanup(grid); } diff --git a/maze_runner.c b/maze_runner.c index 332a84d..ca56a20 100644 --- a/maze_runner.c +++ b/maze_runner.c @@ -8,37 +8,43 @@ #include #include "grid_game_engine.h" -#include "rooster.h" + +#define EMPTY ' ' +#define WALL '#' +#define LIVING_PLAYER '*' +#define DEAD_PLAYER '@' +#define MAZE_EXIT '$' +#define TRAP 'X' /* * Reads in the maze from the assets file. + * + * Side Effects: + * Memory is allocated to store the grid in. */ -static rooster *get_maze(void) { - // TODO: echt opties aanbieden in plaats van hardcoded 1 maze. - // Alternatief is om random een maze te genereren. dit is miss beter. - - // 2. Open het doolhof bestand en lees het rooster. +static grid *get_maze(void) { + // Open het doolhof bestand en lees het rooster. FILE *fh = fopen("assets/maze.txt", "r"); if (fh == NULL) { perror("loading maze"); return NULL; } - rooster *rp = grid_from_file(fh); + grid *gp = grid_create_from_file(fh); fclose(fh); - // 3. Bepaal of het lezen van het rooster is gelukt. - if (rp == NULL) { + // Bepaal of het lezen van het rooster is gelukt. + if (gp == NULL) { fprintf(stderr, "Kan rooster niet maken.\n"); return NULL; } - return rp; + return gp; } /* Voert de benodigde veranderingen in het rooster door als de speler in een * bepaalde richting probeert te bewegen. * Input: - * rp : een pointer naar het rooster + * gp : een pointer naar het rooster * dx,dy: de richting waarin de speler probeert te bewegen. De vier mogelijk- * heden voor (dx,dy) zijn (-1,0), (1,0), (0,-1), (0,1) voor resp. * links, rechts, omhoog en omlaag. @@ -46,33 +52,35 @@ static rooster *get_maze(void) { * Side effect: het rooster wordt aangepast op basis van de handeling van * de speler. */ -static void maze_runner_beweeg(rooster *rp, int dx, int dy) { - int playerx; - int playery; - rooster_zoek(rp, '*', &playerx, &playery); +static void maze_runner_move(grid *gp, const int dx, const int dy) { + coordinate player_position = {0, 0}; + grid_find(gp, LIVING_PLAYER, &player_position.x, &player_position.y); - if (playerx == -1 || playery == -1) { + if (player_position.y == -1) { printf("Player not found!"); - rooster_zet_toestand(rp, STATE_BEGIN); + grid_put_state(gp, STATE_BEGIN); return; } - if (rooster_bevat(rp, playerx + dx, playery + dy) == 1) { - char new_location = rooster_kijk(rp, playerx + dx, playery + dy); + if (grid_contains(gp, player_position.x + dx, player_position.y + dy) == 1) { + char new_location = grid_fetch(gp, player_position.x + dx, player_position.y + dy); switch (new_location) { - case '#': + case WALL: break; - case 'X': - update_grid(rp, ' ', playerx, playery); - rooster_zet_toestand(rp, STATE_VERLOREN); + case TRAP: + grid_put_state(gp, STATE_VERLOREN); + + enable_highlight(RED); + update_grid(gp, DEAD_PLAYER, player_position.x, player_position.y); + disable_highlight(RED); break; - case ' ': - update_grid(rp, ' ', playerx, playery); - update_grid(rp, '*', playerx + dx, playery + dy); + case EMPTY: + update_grid(gp, EMPTY, player_position.x, player_position.y); + update_grid(gp, LIVING_PLAYER, player_position.x + dx, player_position.y + dy); break; - case '$': - update_grid(rp, ' ', playerx, playery); - rooster_zet_toestand(rp, STATE_GEWONNEN); + case MAZE_EXIT: + update_grid(gp, EMPTY, player_position.x, player_position.y); + grid_put_state(gp, STATE_GEWONNEN); break; } refresh(); @@ -82,52 +90,58 @@ static void maze_runner_beweeg(rooster *rp, int dx, int dy) { /* * Speelt het spel met een gegeven rooster tot de toestand niet langer * AAN_HET_SPELEN is. + * + * Input: + * gp: Een pointer naar het rooster. + * + * Side effects: + * Het rooster wordt ge-updated afhankelijk van de user input. */ -static void speel_maze(rooster *rp) { +static void speel_maze(grid *gp) { switch (getch()) { case KEY_UP: // fallthrough case 'w': case 'W': - maze_runner_beweeg(rp, 0, -1); + maze_runner_move(gp, 0, -1); break; case KEY_DOWN: // fallthrough case 's': case 'S': - maze_runner_beweeg(rp, 0, 1); + maze_runner_move(gp, 0, 1); break; case KEY_LEFT: // fallthrough case 'a': case 'A': - maze_runner_beweeg(rp, -1, 0); + maze_runner_move(gp, -1, 0); break; case KEY_RIGHT: // fallthrough case 'd': case 'D': - maze_runner_beweeg(rp, 1, 0); + maze_runner_move(gp, 1, 0); break; case 'p': case KEY_BACKSPACE: case KEY_ESCAPE: - rooster_zet_toestand(rp, STATE_QUIT); + grid_put_state(gp, STATE_QUIT); break; } } void maze_runner(void) { // Voorbereiding. - rooster *rp = get_maze(); - if (rp == NULL) { + grid *gp = get_maze(); + if (gp == NULL) { return; } - show_grid(rp); - rooster_zet_toestand(rp, STATE_AAN_HET_SPELEN); + show_grid(gp); + grid_put_state(gp, STATE_AAN_HET_SPELEN); // Game zelf. - while (rooster_vraag_toestand(rp) == STATE_AAN_HET_SPELEN) { - speel_maze(rp); + while (grid_fetch_state(gp) == STATE_AAN_HET_SPELEN) { + speel_maze(gp); } // Exit game. - game_exit_screen(rp, (coordinate){0, 0}); - rooster_klaar(rp); + game_exit_message(gp, (coordinate){0, grid_height(gp) + 2}); + grid_cleanup(gp); } diff --git a/minigame_menu.c b/minigame_menu.c index 4bb6c67..635796a 100644 --- a/minigame_menu.c +++ b/minigame_menu.c @@ -11,20 +11,19 @@ #include "manual.h" #include "maze_runner.h" #include "minesweeper.h" -#include "rooster.h" #include "snake.h" #define AMOUNT_OF_MENU_OPTIONS 5 typedef enum { - GAME_HELP = 0, + GAME_MANUAL = 0, GAME_MAZE_RUNNER = 1, GAME_SNAKE = 2, GAME_MINESWEEPER = 3, GAME_QUIT = 4, } game; -static game SELECTED_GAME = GAME_HELP; +static game SELECTED_GAME = GAME_MANUAL; static int OFFSET_Y = 5; static int OFFSET_X = 5; @@ -37,7 +36,7 @@ static int OFFSET_X = 5; */ static void launch_game(const game game) { switch (game) { - case GAME_HELP: + case GAME_MANUAL: manual((coordinate){0,0}); break; case GAME_MAZE_RUNNER: @@ -65,16 +64,16 @@ static void launch_game(const game game) { * If a valid menu option is provided: It will be highlighted in green. * If an invalid menu option is provided: Nothing happens */ -static void menu_highlight(const rooster *menu) { +static void menu_highlight(const grid *menu) { switch (SELECTED_GAME) { - case GAME_HELP: + case GAME_MANUAL: case GAME_MAZE_RUNNER: case GAME_SNAKE: case GAME_MINESWEEPER: case GAME_QUIT: attron(COLOR_PAIR(GREEN)); - char* row = rooster_vraag_rij(menu, SELECTED_GAME); + char* row = grid_fetch_row(menu, SELECTED_GAME); mvprintw(OFFSET_Y + (int)SELECTED_GAME, OFFSET_X, "%s", row); free(row); @@ -94,7 +93,7 @@ static void menu_highlight(const rooster *menu) { * Side Effects: * Displays the menu */ -static void show_menu(const rooster *menu) { +static void show_menu(const grid *menu) { erase(); show_grid_on_offset(menu, OFFSET_X, OFFSET_Y); menu_highlight(menu); @@ -167,19 +166,19 @@ static int navigate_menu(void) { * Output: * A pointer to the menu grid. */ -static rooster *initialize_menu(void) { +static grid *initialize_menu(void) { char menu[] = "How to play\n" "Maze Runner\n" " Snake \n" "Minesweeper\n" " Leave \n"; - rooster *rp = grid_from_string(menu); + grid *rp = grid_create_from_string(menu); return rp; } void minigame_menu(void) { - rooster *menu = initialize_menu(); - + grid *menu = initialize_menu(); + launch_game(GAME_MANUAL); while (true) { show_menu(menu); if (navigate_menu() == 1) { @@ -187,5 +186,5 @@ void minigame_menu(void) { } } - rooster_klaar(menu); + grid_cleanup(menu); } diff --git a/rooster.h b/rooster.h deleted file mode 100644 index 565c641..0000000 --- a/rooster.h +++ /dev/null @@ -1,177 +0,0 @@ -/* rooster.h - - Deze module verzorgt het datatype "rooster". Een rooster representeert een - rechthoekig grid van objecten. Elk object is in dit rooster een char. - - Deze header file beschrijft het interface voor "rooster". - De implementatie, in "rooster.c", moet je grotendeels zelf schrijven. -*/ - -#ifndef _ROOSTER_H -#define _ROOSTER_H - -#include - - // Dankzij de typedef hoef je niet telkens "struct rooster_data" te schrijven. - // Definieer struct rooster_data in rooster.c. -struct rooster_data; -typedef struct rooster_data rooster; - -typedef enum { - STATE_BEGIN, - STATE_AAN_HET_SPELEN, - STATE_GEWONNEN, - STATE_VERLOREN, - STATE_QUIT -} toestand; - -/* Maak een rooster op basis van de data in de gegeven stream. - - fh: de stream waaruit het doolhof gelezen moet worden. - - Uitvoer: als alles goed gaat, een pointer naar een rooster (die op de heap is - gealloceerd), dat overeenkomt met de gegeven beschrijving. - De begintoestand is BEGIN. - - Als de beschrijving niet consistent is (bijvoorbeeld - niet alle rijen zijn even lang, of er klopt iets anders niet), of - als niet voldoende geheugen kan worden gereserveerd, dan wordt - NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen - achter.) -*/ -rooster *grid_from_file(FILE *fh); - -/* - * Maak een rooster op basis van een gegeven string. - * - * Uitvoer: als alles goed gaat, een pointer naar een rooster (die op de heap is - * gealloceerd), dat overeenkomt met de gegeven beschrijving. - * De begintoestand is BEGIN. - * - * Als de beschrijving niet consistent is (bijvoorbeeld - * niet alle rijen zijn even lang, of er klopt iets anders niet), of - * als niet voldoende geheugen kan worden gereserveerd, dan wordt - * NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen - * achter.) - */ -rooster *grid_from_string(const char* input); - -/* - * Haal een rij uit het rooster op. - * - * Input: - * rp: een pointer naar het rooster - * y: de y-coordinaat van de rij die je wilt hebben. - * - * Output: - * Een pointer naar een nieuwe string met daarin alle karakters in die rij. - */ -char *rooster_vraag_rij(const rooster *rp, int y); - -/* - * Maak een kopie van een rooster - * - * Input: - * rp: Een pointer naar het rooster. - * - * Output: - * Een pointer naar het kopie. - */ -rooster *rooster_kopieer(const rooster *rp); - -/* Vraag de huidige toestand van het spel op. - - Input: - rp: een pointer naar het rooster. - - Uitvoer: de toestand. -*/ -toestand rooster_vraag_toestand(const rooster *rp); - - -/* Verander de huidige toestand van het spel. - - rp: een pointer naar het rooster. - t: de nieuwe toestand. -*/ -void rooster_zet_toestand(rooster *rp, toestand t); - - -/* Geef alle resources vrij die zijn gealloceerd voor een rooster. - De rooster pointer is na aanroep van deze functie niet meer bruikbaar. - - rp: een pointer naar het rooster. -*/ -void rooster_klaar(rooster *rp); - - -/* Vraag de breedte van het rooster op, dat wil zeggen, het aantal kolommen. - - rp: een pointer naar het rooster. - - Uitvoer: de breedte. -*/ -int rooster_breedte(const rooster *rp); - - -/* Vraag de hoogte van het rooster op, dat wil zeggen, het aantal rijen. - - rp: een pointer naar het rooster. - - Uitvoer: de hoogte. -*/ -int rooster_hoogte(const rooster *rp); - - -/* Kijk of de gegeven positie binnen het rooster valt. - - rp: een pointer naar het rooster. - x,y: de positie. - - Uitvoer: 1 als de positie binnen het rooster valt, anders 0. -*/ -int rooster_bevat(const rooster *rp, int x, int y); - - -/* Kijk welk object er staat op een bepaalde positie in het rooster. - - rp : een pointer naar het rooster - x,y: de betreffende positie. - - Uitvoer: het object op die positie, of '\0' als de positie buiten het - rooster valt. -*/ -char rooster_kijk(const rooster *rp, int x, int y); - - -/* Schrijf een bepaald object op een bepaalde positie in het rooster. - - rp : een pointer naar het rooster - x,y: de betreffende positie. - c : het object. - - Effect: als (x,y) binnen het rooster ligt, wordt het object op - de opgegeven positie geplaatst, anders verandert er niets. - - Uitvoer: 1 als het object is geplaatst, of 0 als het buiten de grenzen lag. -*/ -int rooster_plaats(rooster *rp, int x, int y, char c); - - -/* Zoek een bepaald object in het rooster, en geef de coordinaten van het - object terug via de gegeven pointers. Let op: als er meerdere objecten van - het gezochte soort in het rooster voorkomen, is niet gedefinieerd van welke - de positie wordt gevonden. - - rp : een pointer naar het rooster - c : het object dat moet worden gezocht - x,y: pointers naar de geheugenlocaties waar de gevonden positie moet worden - geschreven. - - Uitvoer: via de pointers x en y. Als het object niet wordt gevonden worden - *x en *y op -1 gezet. -*/ -void rooster_zoek(const rooster *rp, char c, int *x, int *y); - - -#endif diff --git a/snake.c b/snake.c index b298c98..7d7a389 100644 --- a/snake.c +++ b/snake.c @@ -34,15 +34,19 @@ typedef enum { DIRECTION_LEFT = 3 } direction; -static direction PREVIOUS_DIRECTION = DIRECTION_DOWN; -static direction CURRENT_DIRECTION = DIRECTION_DOWN; +// Snake globals +static direction PREVIOUS_DIRECTION; +static direction CURRENT_DIRECTION; static coordinate SNAKE_HEAD; static coordinate SNAKE_TAIL; + +// Map globals +static coordinate RENDER_AT; static coordinate MESSAGE_LOCATION = {0,0}; static int MAP_HEIGHT = 20; static int MAP_WIDTH = 20; -static rooster *GRID; -static pthread_mutex_t MUTEX; +static grid *GRID; +static pthread_mutex_t SNAKE_MUTEX; /* * Create a snake body part. @@ -51,10 +55,10 @@ static pthread_mutex_t MUTEX; * dir: the direction the body part should point to. * * Output: - * a character representing that bodypart. + * a character representing that body part. */ static char get_body_part(const direction dir) { - return (char)dir + '0'; + return (char)(dir + '0'); } /* @@ -89,15 +93,15 @@ static void create_grid(void) { for (int i = 1; i <= (MAP_WIDTH + 1) * MAP_HEIGHT; i++) { // Also subtract the null terminator - int bottom_line = i > grid_size - (MAP_WIDTH + 2); - int top_line = i < MAP_WIDTH + 1; + const int bottom_line = i > grid_size - (MAP_WIDTH + 2); + const int top_line = i < MAP_WIDTH + 1; - int line_position = modulo(i, MAP_WIDTH + 1); + const int line_position = modulo(i, MAP_WIDTH + 1); - int line_start = line_position == 1; - int line_end = line_position == MAP_WIDTH; + const int line_start = line_position == 1; + const int line_end = line_position == MAP_WIDTH; - int newline = line_position == 0; + const int newline = line_position == 0; if (newline) { map[i - 1] = '\n'; @@ -110,36 +114,35 @@ static void create_grid(void) { map[grid_size - 1] = '\0'; - GRID = grid_from_string(map); - free(map); + GRID = grid_create_from_string(map); - rooster_plaats(GRID, rooster_breedte(GRID) / 2, rooster_hoogte(GRID) / 2, get_body_part(CURRENT_DIRECTION)); + free(map); } /* + * Spawn a piece of food at an empty grid location. * + * Side Effect: + * One of the empty grid spaces gets replaced with a piece of food. */ -static void generate_food() { +static void generate_food(void) { coordinate empty_spots[MAP_HEIGHT * MAP_WIDTH]; - // Usable as index when initialized like this. int available_spots = 0; for (int x = 0; x < MAP_WIDTH; x++) { for (int y = 0; y < MAP_HEIGHT; y++) { - if (rooster_kijk(GRID, x, y) == CELL_EMPTY) { - coordinate new_spot = {x, y}; + if (grid_fetch(GRID, x, y) == CELL_EMPTY) { + const coordinate new_spot = {x, y}; empty_spots[available_spots] = new_spot; available_spots++; } } } - // Available spots will now be a counter. - const coordinate food_location = empty_spots[modulo(rand(), available_spots)]; - rooster_plaats(GRID, food_location.x, food_location.y, CELL_FOOD); + grid_put(GRID, food_location.x, food_location.y, CELL_FOOD); } /* @@ -150,34 +153,33 @@ static void generate_food() { * * Side Effects: * Seed random with the current time. + * (Re)set the global variables. + * initialize the mutex + * */ static void initialize(void) { + // Seed random. srand(time(NULL)); + // Create the grid. create_grid(); - if (GRID == NULL) { return; } + // Set globals. CURRENT_DIRECTION = DIRECTION_DOWN; PREVIOUS_DIRECTION = DIRECTION_DOWN; + SNAKE_HEAD = (coordinate){.x = grid_width(GRID) / 2, .y = grid_height(GRID) / 2}; + SNAKE_TAIL = SNAKE_HEAD; + RENDER_AT = (coordinate){.x = OFFSET_X, .y = OFFSET_Y}; + MESSAGE_LOCATION = (coordinate){.x = RENDER_AT.x, .y = RENDER_AT.y + grid_height(GRID) + 2}; - // Set snake head and snake tail. - rooster_zoek(GRID, get_body_part(CURRENT_DIRECTION), &SNAKE_HEAD.x, &SNAKE_HEAD.y); - SNAKE_TAIL.x = SNAKE_HEAD.x; - SNAKE_TAIL.y = SNAKE_HEAD.y; - + // Create the first body part and spawn the first piece of food. + grid_put(GRID, SNAKE_HEAD.x, SNAKE_HEAD.y, get_body_part(CURRENT_DIRECTION)); generate_food(); - if (SNAKE_HEAD.x == -1) { - free(GRID); - GRID = NULL; - return; - } - - MESSAGE_LOCATION.y = rooster_hoogte(GRID) + OFFSET_Y + 5; - MESSAGE_LOCATION.x = OFFSET_X - 5 >= 0 ? OFFSET_X - 5 : 0; + pthread_mutex_init(&SNAKE_MUTEX, NULL); } /* @@ -187,11 +189,11 @@ static void initialize(void) { * c: The char to check. * * Returns: - * The snake will move forward: 0 - * The snake will eat an apple: 1 - * The snake will die: 2 + * The snake will move forward: SNAKE_MOVE + * The snake will eat an apple: SNAKE_EAT + * The snake will die: SNAKE_DIE */ -static snake_action collision_check(char c) { +static snake_action collision_check(const char c) { if (c == CELL_EMPTY) { return SNAKE_MOVE; } @@ -203,16 +205,32 @@ static snake_action collision_check(char c) { return SNAKE_DIE; } -static void update_snake(coordinate new_head, snake_action action) { +/* + * Move the snake to a given location + * + * Input: + * new_location: The location the snake should move to. + * + * Side effects: + * In case nothing is encountered: The snake moves to the new location. + * In case an obstacle is encountered (wall or part of the snake): The snake dies. + * In case a piece of food is encountered: The snake eats the food and grows by 1. + * + * Note: + * Moving to a location the snake can't reach is undefined behaviour. + */ +static void update_snake(const coordinate new_location) { + const snake_action action = collision_check(grid_fetch(GRID, new_location.x, new_location.y)); + if (action == SNAKE_DIE) { - rooster_zet_toestand(GRID, STATE_VERLOREN); + grid_put_state(GRID, STATE_VERLOREN); return; } if (action == SNAKE_MOVE) { coordinate new_tail = SNAKE_TAIL; - switch (get_body_part_direction(rooster_kijk(GRID, SNAKE_TAIL.x, SNAKE_TAIL.y))) { + switch (get_body_part_direction(grid_fetch(GRID, SNAKE_TAIL.x, SNAKE_TAIL.y))) { case DIRECTION_UP: new_tail.y--; break; @@ -227,13 +245,13 @@ static void update_snake(coordinate new_head, snake_action action) { break; } - rooster_plaats(GRID, SNAKE_TAIL.x, SNAKE_TAIL.y, CELL_EMPTY); + grid_put(GRID, SNAKE_TAIL.x, SNAKE_TAIL.y, CELL_EMPTY); SNAKE_TAIL = new_tail; } // New head placed after tail moves. It can occupy the empty space created by the tail moving. - rooster_plaats(GRID, new_head.x, new_head.y, get_body_part(CURRENT_DIRECTION)); - SNAKE_HEAD = new_head; + grid_put(GRID, new_location.x, new_location.y, get_body_part(CURRENT_DIRECTION)); + SNAKE_HEAD = new_location; PREVIOUS_DIRECTION = CURRENT_DIRECTION; if (action == SNAKE_EAT) { @@ -241,54 +259,96 @@ static void update_snake(coordinate new_head, snake_action action) { } } +/* + * Handle snake movement. + * + * Input: + * NULL, this signature is so it can be run as a thread. + * + * Returns: + * NULL when finished + * + * Side Effects: + * While the game is running, it moves the snake forward every 0.25 seconds and updates the game + * state accordingly. + * + * In case an obstacle is encountered (wall or part of the snake): It dies. + * In case a piece of food is encountered: It eats the apple and grows by 1. + */ static void *snake_move(void *arg) { struct timespec timer; timer.tv_sec = 0; timer.tv_nsec = 250000000L; // Snake moves every 0.25 seconds. - while (rooster_vraag_toestand(GRID) == STATE_AAN_HET_SPELEN) { + while (grid_fetch_state(GRID) == STATE_AAN_HET_SPELEN) { nanosleep(&timer, NULL); - pthread_mutex_lock(&MUTEX); - coordinate new_head = SNAKE_HEAD; + pthread_mutex_lock(&SNAKE_MUTEX); + coordinate new_location = SNAKE_HEAD; switch (CURRENT_DIRECTION) { case DIRECTION_UP: - new_head.y--; + new_location.y--; break; case DIRECTION_RIGHT: - new_head.x++; + new_location.x++; break; case DIRECTION_DOWN: - new_head.y++; + new_location.y++; break; case DIRECTION_LEFT: - new_head.x--; + new_location.x--; break; } - snake_action action = collision_check(rooster_kijk(GRID, new_head.x, new_head.y)); - - update_snake(new_head, action); + update_snake(new_location); show_grid_on_offset(GRID, OFFSET_X, OFFSET_Y); - pthread_mutex_unlock(&MUTEX); + pthread_mutex_unlock(&SNAKE_MUTEX); } return NULL; } -static void turn_snake(direction dir) { - if ((direction)modulo(dir + 2, DIRECTION_COUNT) == PREVIOUS_DIRECTION +/* + * Turn the snake in the given direction. + * + * Input: + * direction: The direction the snake should turn to. + * + * Side effects: + * If the snake is able to turn in the given direction: + * The snake's direction gets updated with the new value. + * If the snake is unable to turn in the given direction: + * The snake's direction remains unchanged. + */ +static void turn_snake(const direction dir) { + // If the snake has a length of 1, it is able to turn around on the spot. + if ((direction)modulo((int)dir + 2, DIRECTION_COUNT) == PREVIOUS_DIRECTION && !same_coordinate(SNAKE_HEAD, SNAKE_TAIL)) { return; } - rooster_plaats(GRID, SNAKE_HEAD.x, SNAKE_HEAD.y, get_body_part(dir)); + grid_put(GRID, SNAKE_HEAD.x, SNAKE_HEAD.y, get_body_part(dir)); CURRENT_DIRECTION = dir; show_grid_on_offset(GRID, OFFSET_X, OFFSET_Y); } -static void *play_snake(void *arg) { - while (rooster_vraag_toestand(GRID) == STATE_AAN_HET_SPELEN) { +/* + * Handle user input. + * + * Input: + * NULL, this signature is so it can be run as a thread. + * + * Returns: + * NULL when finished + * + * Side Effects: + * While the game is running, it constantly updates the direction the snake is pointing to + * based on user input. + * + * In case ESCAPE or BACKSPACE is pressed it quits the game. + */ +static void *user_input(void *arg) { + while (grid_fetch_state(GRID) == STATE_AAN_HET_SPELEN) { timeout(1); - int c = getch(); - pthread_mutex_lock(&MUTEX); + const int c = getch(); + pthread_mutex_lock(&SNAKE_MUTEX); switch (c) { case KEY_UP: // fallthrough case 'w': @@ -312,46 +372,78 @@ static void *play_snake(void *arg) { break; case KEY_BACKSPACE: case KEY_ESCAPE: - rooster_zet_toestand(GRID, STATE_QUIT); + grid_put_state(GRID, STATE_QUIT); break; } - pthread_mutex_unlock(&MUTEX); + pthread_mutex_unlock(&SNAKE_MUTEX); } return NULL; } -//todo: ?? Win condition? +/* + * Waits for the user to press their SPACEBAR before starting the game. + * + * Side Effects: + * If the user presses backspace or escape, the whole game quits. + */ +static void wait_for_start(void) { + const char start_message[] = "Press SPACEBAR to start playing."; + const char empty_message[] = " "; + mvaddstr(MESSAGE_LOCATION.y, MESSAGE_LOCATION.x, start_message); + + grid_put_state(GRID, STATE_AAN_HET_SPELEN); + + for (int c = getch(); c != ' '; c = getch()) { + switch (c) { + case KEY_BACKSPACE: + case KEY_ESCAPE: + grid_put_state(GRID, STATE_QUIT); + mvaddstr(MESSAGE_LOCATION.y, MESSAGE_LOCATION.x, empty_message); + return; + } + } + + // Cleanup the start playing message. + mvaddstr(MESSAGE_LOCATION.y, MESSAGE_LOCATION.x, empty_message); +} + +/* + * Cleanup the snake memory + * + * Side effects: + * Frees all the memory used by the snake + */ +static void snake_cleanup(void) { + pthread_mutex_destroy(&SNAKE_MUTEX); + grid_cleanup(GRID); +} + void snake(void) { initialize(); if (GRID == NULL) { return; } - // Created necessary threads. - pthread_mutex_init(&MUTEX, NULL); - pthread_t user_input; - pthread_t game_tick; - // Show game. erase(); show_grid_on_offset(GRID, OFFSET_X, OFFSET_Y); - mvaddstr(MESSAGE_LOCATION.y, MESSAGE_LOCATION.x, "Press SPACEBAR to start playing."); - rooster_zet_toestand(GRID, STATE_AAN_HET_SPELEN); + wait_for_start(); - while (getch() != ' ') {} + if (grid_fetch_state(GRID) == STATE_AAN_HET_SPELEN) { + // Create and start necessary threads. + pthread_t input_thread; + pthread_t game_tick_thread; - // Cleanup the start playing message. - mvaddstr(MESSAGE_LOCATION.y, MESSAGE_LOCATION.x, " "); + pthread_create(&input_thread, NULL, user_input, NULL); + pthread_create(&game_tick_thread, NULL, snake_move, NULL); - pthread_create(&user_input, NULL, play_snake, NULL); - pthread_create(&game_tick, NULL, snake_move, NULL); + // Wait until the gamestate is no longer STATE_AAN_HET_SPELEN + pthread_join(game_tick_thread, NULL); + pthread_join(input_thread, NULL); + } - // Wait until the gamestate is no longer STATE_AAN_HET_SPELEN - pthread_join(game_tick, NULL); - pthread_join(user_input, NULL); - pthread_mutex_destroy(&MUTEX); + game_exit_message(GRID, MESSAGE_LOCATION); - rooster_klaar(GRID); - graceful_exit(MESSAGE_LOCATION); + snake_cleanup(); } diff --git a/spel b/spel index 9feb65ce78e4e9dea4a670340e42edd53cf56447..df382ac93a4caf85862c72ecb245603ae0084286 100755 GIT binary patch literal 172024 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 literal 167248 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 diff --git a/spel.c b/spel.c index 0ffc4bb..c7123a3 100644 --- a/spel.c +++ b/spel.c @@ -12,14 +12,18 @@ */ #include "grid_game_engine.h" -#include "manual.h" #include "minigame_menu.h" +/* + * Play minigame menu. + * + * Side effect: + * Minigame menu starts. + */ int main(void) { init_engine(); // Speel het spel. - // manual((coordinate){0,3}); minigame_menu(); cleanup_engine();