From e124e3071ef5e4f985a70993aab3a377ad253511 Mon Sep 17 00:00:00 2001 From: Jeroen Boxhoorn Date: Sat, 18 Oct 2025 21:35:01 +0200 Subject: [PATCH] Code cleanup and documentation --- deel2.tar.gz | Bin 0 -> 12743 bytes grid.c | 92 ++++++++++++++++++++++++--------------------- grid.h | 2 +- grid_game_engine.c | 7 +--- grid_game_engine.h | 9 ++--- manual.c | 9 +++-- manual.h | 8 ++-- maze_runner.c | 6 +-- maze_runner.h | 10 +++-- minesweeper.c | 6 +-- minesweeper.h | 10 ++--- minigame_menu.c | 7 ++-- minigame_menu.h | 14 +++---- snake.c | 6 +-- snake.h | 8 ++-- spel | Bin 172024 -> 172264 bytes spel.c | 6 ++- 17 files changed, 105 insertions(+), 95 deletions(-) create mode 100644 deel2.tar.gz diff --git a/deel2.tar.gz b/deel2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d883cfd2475dd3b9e684cf80c398ae14c2e23b04 GIT binary patch literal 12743 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 N{ty0JtndIB0RWrvDJ}p2 literal 0 HcmV?d00001 diff --git a/grid.c b/grid.c index 2224b50..6489548 100644 --- a/grid.c +++ b/grid.c @@ -1,3 +1,8 @@ +/* + * Created by snapshot112 on 2/10/2025 + */ + + #include "grid.h" #include @@ -8,12 +13,15 @@ * The grid type this program is build around. */ typedef struct grid_data { - char *rost; + char *locations; int height; int width; state state; } grid; +/* + * Translate x and y coordinates to a location index on the grid. + */ static int internal_location(const grid *gp, const int x, const int y) { return y * (gp->width + 1) + x; } @@ -48,12 +56,12 @@ grid *grid_create_from_string(const char* input) { return NULL; } - gp->rost = malloc(grid_size * sizeof(char)); + gp->locations = malloc(grid_size * sizeof(char)); gp->height = height; gp->width = width; gp->state = STATE_BEGIN; - strcpy(gp->rost, input); + strcpy(gp->locations, input); return gp; } @@ -62,8 +70,8 @@ grid *grid_create_from_string(const char* input) { * Sets a grids width and height * * Input: - * fh: the stream to read the grid from. - * rost: a grid file to store the width and height in. + * fh: The stream to read the grid from. + * gp: A pointer to the grid whose width and height you want to set. * * Side effects: * the grid gets its width and height set @@ -72,27 +80,27 @@ grid *grid_create_from_string(const char* input) { * 1 if the file width and height seem to match with its size * 0 otherwise */ -static int get_grid_sizes(FILE *fh, grid *rost) { +static int get_grid_sizes(FILE *fh, grid *gp) { while (getc(fh) != '\n') { if (feof(fh)) { return 0; } - rost->width++; + gp->width++; } - if (rost->width == 0) { + if (gp->width == 0) { return 0; } fseek(fh, 0, SEEK_END); // Get file size (- 1 for the blank newline and EOF at the end) - if (ftell(fh) % (rost->width + 1) != 0) { + if (ftell(fh) % (gp->width + 1) != 0) { // Not all lines are the same width return 0; } - rost->height = (int)ftell(fh) / (int)sizeof(char) / (rost->width + 1); + gp->height = (int)ftell(fh) / (int)sizeof(char) / (gp->width + 1); fseek(fh, 0, SEEK_SET); return 1; @@ -103,7 +111,7 @@ grid *grid_create_from_file(FILE *fh) { return NULL; } - grid rost = { + grid temp_grid = { NULL, 0, 0, @@ -111,52 +119,52 @@ grid *grid_create_from_file(FILE *fh) { }; // Sets the width and height of the grid. - if (get_grid_sizes(fh, &rost) != 1) { + if (get_grid_sizes(fh, &temp_grid) != 1) { // Unlogical file structure. return NULL; } - const int grid_size = (rost.width + 1) * rost.height + 1; + const int grid_size = (temp_grid.width + 1) * temp_grid.height + 1; - rost.rost = malloc(grid_size * sizeof(char)); - if (rost.rost == NULL) { + temp_grid.locations = malloc(grid_size * sizeof(char)); + if (temp_grid.locations == NULL) { return NULL; } // This makes the strncat() work. - rost.rost[0] = '\0'; + temp_grid.locations[0] = '\0'; - char *line = malloc((rost.width + 2) * sizeof(char)); + char *line = malloc((temp_grid.width + 2) * sizeof(char)); if (line == NULL) { return NULL; } - for (int i = 0; i < rost.height; i++) { - if (fgets(line, rost.width + 2, fh) == NULL) { - free(rost.rost); + for (int i = 0; i < temp_grid.height; i++) { + if (fgets(line, temp_grid.width + 2, fh) == NULL) { + free(temp_grid.locations); free(line); return NULL; } // Validate that the line length is correct - if ((int)strcspn(line, "\n") != rost.width) { - free(rost.rost); + if ((int)strcspn(line, "\n") != temp_grid.width) { + free(temp_grid.locations); free(line); return NULL; } // Width is without the newline at the end. - strncat(rost.rost, line, rost.width + 1); + strncat(temp_grid.locations, line, temp_grid.width + 1); } free(line); - grid *return_grid = malloc(sizeof(rost)); + grid *return_grid = malloc(sizeof(temp_grid)); if (return_grid == NULL) { return NULL; } - memcpy(return_grid, &rost, sizeof(rost)); + memcpy(return_grid, &temp_grid, sizeof(temp_grid)); return return_grid; } @@ -192,9 +200,9 @@ void grid_put_state(grid *gp, const state t) { void grid_cleanup(grid *gp) { if (gp != NULL) { - if (gp->rost != NULL) + if (gp->locations != NULL) { - free(gp->rost); + free(gp->locations); } free(gp); } @@ -215,7 +223,7 @@ int grid_height(const grid *gp) { } int grid_contains(const grid *gp, const int x, const int y) { - if (gp != NULL && gp->rost != NULL) { + if (gp != NULL && gp->locations != NULL) { if (x >= 0 && y >= 0 && x < gp->width && y < gp->height) { return 1; @@ -225,25 +233,25 @@ int grid_contains(const grid *gp, const int x, const int 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)]; + if (gp != NULL && gp->locations != NULL && grid_contains(gp, x, y) == 1) { + return gp->locations[internal_location(gp, x, y)]; } return '\0'; } 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; + if (gp != NULL && gp->locations != NULL && grid_contains(gp, x, y) == 1) { + gp->locations[internal_location(gp, x, y)] = c; return 1; } return 0; } char *grid_fetch_row(const grid *gp, const int y) { - if (gp != NULL && gp->rost != NULL && grid_contains(gp, 0, y) == 1) { + if (gp != NULL && gp->locations != NULL && grid_contains(gp, 0, y) == 1) { // we're going to remove the newline so this is long enough char *row = malloc((gp->width + 1) * sizeof(char)); - memcpy(row, &gp->rost[internal_location(gp, 0, y)], gp->width * sizeof(char)); + memcpy(row, &gp->locations[internal_location(gp, 0, y)], gp->width * sizeof(char)); row[gp->width] = '\0'; return row; } @@ -251,11 +259,11 @@ char *grid_fetch_row(const grid *gp, const int y) { } grid *grid_copy(const grid *gp) { - if (gp != NULL && gp->rost != NULL) { + if (gp != NULL && gp->locations != NULL) { const size_t grid_memory = ((gp->width + 1) * gp->height + 1) * sizeof(char); - char *rost = malloc(grid_memory); - if (rost == NULL) { + char *locations = malloc(grid_memory); + if (locations == NULL) { return NULL; } @@ -264,18 +272,18 @@ grid *grid_copy(const grid *gp) { return NULL; } - memcpy(rost, gp->rost, grid_memory); + memcpy(locations, gp->locations, grid_memory); memcpy(new_grid, gp, sizeof(*gp)); - new_grid->rost = rost; + new_grid->locations = locations; return new_grid; } return NULL; } void grid_find(const grid *gp, const char c, int *x, int *y) { - if (gp == NULL || gp->rost == NULL) { + if (gp == NULL || gp->locations == NULL) { *x = -1; *y = -1; return; @@ -283,9 +291,9 @@ void grid_find(const grid *gp, const char c, int *x, int *y) { const char search[2] = {c}; - const int char_index = (int)strcspn(gp->rost, search); + const int char_index = (int)strcspn(gp->locations, search); - if (gp->rost[char_index] == '\0') + if (gp->locations[char_index] == '\0') { *x = -1; *y = -1; diff --git a/grid.h b/grid.h index 5dd800a..838834e 100644 --- a/grid.h +++ b/grid.h @@ -1,5 +1,5 @@ /* - * grid.h + * Created by snapshot112 on 2/10/2025 * * This module provides a grid api. * diff --git a/grid_game_engine.c b/grid_game_engine.c index 82958d0..3989236 100644 --- a/grid_game_engine.c +++ b/grid_game_engine.c @@ -1,7 +1,5 @@ /* - * Created by snapshot112 on 10/15/25. - * - * A game engine that can run and display games in square grids. + * Created by snapshot112 on 8/10/2025 */ #include "grid_game_engine.h" @@ -84,14 +82,13 @@ static void display_hackerman(const coordinate location) { } void graceful_exit(const coordinate message_location) { - mvaddstr(message_location.y, message_location.x, "Press ENTER or SPACE to exit."); + mvaddstr(message_location.y, message_location.x, "Press ENTER to exit."); while (1) { switch (getch()) { case KEY_BACKSPACE: case KEY_ESCAPE: case KEY_ENTER: case '\n': - case ' ': return; } } diff --git a/grid_game_engine.h b/grid_game_engine.h index 713e90f..5ba77c5 100644 --- a/grid_game_engine.h +++ b/grid_game_engine.h @@ -1,8 +1,7 @@ /* - * Created by snapshot112 on 10/15/25. + * Created by snapshot112 on 15/10/2025. * - * A game engine that uses the can run and display games in rectangular grids. - * The graphics are made using ncurses. + * A game engine build on top of a grid api to run and display games using ncurses. * * Please make sure to initialize the game engine before running any games. */ @@ -133,12 +132,12 @@ void update_grid(grid *gp, char c, int x, int y); void game_exit_message(const grid *gp, coordinate location); /* - * Waits for you to press ENTER or SPACE before exiting the game. + * Waits for you to press ENTER before exiting the game. * * Input: * coordinate: The location to show the message. * - * Side effect: Prints "Press ENTER or SPACE to exit." game to the console. + * Side effect: Prints "Press ENTER to exit." game to the console. */ void graceful_exit(coordinate message_location); diff --git a/manual.c b/manual.c index 63cab11..022663e 100644 --- a/manual.c +++ b/manual.c @@ -1,6 +1,7 @@ -// -// Created by snapshot112 on 10/17/25. -// +/* + * Created by snapshot112 on 10/17/2025 + */ + #include "manual.h" @@ -26,7 +27,7 @@ void manual(const coordinate display_location) { // Wait until ESCAPE or BACKSPACE is pressed. timeout(200); - for (int ch = getch(); ch != KEY_ESCAPE && ch != KEY_BACKSPACE && ch != ' '; ch = getch()) { + for (int ch = getch(); ch != KEY_ESCAPE && ch != KEY_BACKSPACE; ch = getch()) { // Update the screen in the meantime to accommodate windows resizes. show_grid_on_offset(grid, display_location.x, display_location.y); } diff --git a/manual.h b/manual.h index da8d146..7b24f77 100644 --- a/manual.h +++ b/manual.h @@ -1,7 +1,7 @@ /* - * Created by snapshot112 on 10/15/25. + * Created by snapshot112 on 10/17/2025 * - * Display the manual for the minigames + * Provides a way to display the minigame manual in the assets in game. */ #ifndef MINIGAME_MENU_MANUAL_H @@ -9,7 +9,7 @@ #include "grid_game_engine.h" /* - * A game manual for the minigames menu. + * An in game manual for the minigames menu. * * Please make sure to include and initialize the game engine before opening the manual * @@ -20,7 +20,7 @@ * Clears the console and uses it to display the manual. * * Controls: - * Press ESCAPE or ENTER to exit the manual. + * Press ESCAPE or BACKSPACE to exit the manual. */ void manual(coordinate display_location); diff --git a/maze_runner.c b/maze_runner.c index ca56a20..f48cc7d 100644 --- a/maze_runner.c +++ b/maze_runner.c @@ -1,6 +1,6 @@ -// -// Created by snapshot112 on 10/15/25. -// +/* + * Created by snapshot112 on 6/10/2025 + */ #include "maze_runner.h" diff --git a/maze_runner.h b/maze_runner.h index ddfbff7..a4eb7bd 100644 --- a/maze_runner.h +++ b/maze_runner.h @@ -1,9 +1,11 @@ /* + * Created by snapshot112 on 6/10/2025 + * * Naam: Jeroen Boxhoorn * UvAnetID: 16333969 - * Studie: BSc Informatica + * Studie: BSC Informatica * - * A game of maze runner configured to run on the grid game engine. + * A game of maze runner build on the grid game engine. * * Please make sure to include and initialize the game engine before calling maze_runner(); * @@ -23,7 +25,7 @@ #define MINIGAME_MENU_MAZE_RUNNER_H /* - * A game of maze runner configured to run on the grid game engine. + * A game of maze runner build on the grid game engine. * * Please make sure to include and initialize the game engine before calling maze_runner(); * @@ -32,7 +34,7 @@ * * Controls: * use WSAD or arrow keys to move through the maze. - * Use BACKSPACE to exit the game early. + * Use BACKSPACE or ESCAPE to exit the game early. */ void maze_runner(void); diff --git a/minesweeper.c b/minesweeper.c index c59858f..b20190f 100644 --- a/minesweeper.c +++ b/minesweeper.c @@ -1,6 +1,6 @@ -// -// Created by snapshot112 on 10/15/25. -// +/* + * Created by snapshot112 on 15/10/2025 + */ #include "minesweeper.h" diff --git a/minesweeper.h b/minesweeper.h index 6463556..5db4cdc 100644 --- a/minesweeper.h +++ b/minesweeper.h @@ -1,18 +1,18 @@ /* - * Created by snapshot112 on 10/15/25. + * Created by snapshot112 on 15/10/2025 * - * A game of minesweeper runner configured to run on the grid game engine. + * A game of minesweeper build on the grid game engine. * - * Please make sure to include and initialize the game engine before calling snake(); + * Please make sure to include and initialize the game engine before calling minesweeper(); */ #ifndef MINIGAME_MENU_MINESWEEPER_H #define MINIGAME_MENU_MINESWEEPER_H /* - * A game of minesweeper configured to run on the grid game engine. + * A game of minesweeper build on the grid game engine. * - * Please make sure to include and initialize the game engine before calling snake(); + * Please make sure to include and initialize the game engine before calling minesweeper(); * * Side Effects: * Clears the console and uses it to play a game of minesweeper. diff --git a/minigame_menu.c b/minigame_menu.c index 635796a..7eadefd 100644 --- a/minigame_menu.c +++ b/minigame_menu.c @@ -1,6 +1,6 @@ -// -// Created by snapshot112 on 10/15/25. -// +/* + * Created by snapshot112 on 15/10/2025 + */ #include "minigame_menu.h" @@ -152,7 +152,6 @@ static int navigate_menu(void) { } launch_game(SELECTED_GAME); break; - case 'p': case KEY_BACKSPACE: case KEY_ESCAPE: return 1; diff --git a/minigame_menu.h b/minigame_menu.h index 7800f5a..07a68e7 100644 --- a/minigame_menu.h +++ b/minigame_menu.h @@ -1,7 +1,7 @@ /* - * Created by snapshot112 on 10/15/25. + * Created by snapshot112 on 15/10/2025 * - * A minigame menu for games configured to run on the grid game engine. + * A minigame menu for games build on the grid game engine. * * Please make sure to include and initialize the game engine before calling menu(); */ @@ -10,7 +10,7 @@ #define MINIGAME_MENU_MINIGAME_MENU_H /* - * A minigame menu for games configured to run on the grid game engine. + * A minigame menu for games build on the grid game engine. * * Please make sure to include and initialize the game engine before calling menu(); * @@ -18,10 +18,10 @@ * Clears the console and uses it to display a minigame menu. * * Controls: - * 'w'/'arr_up: Next menu item. - * 's'/'arr_down': Previous menu item. - * 'f': Select current menu item. - * 'BACKSPACE': Exit the menu. + * 'w'/'arr_up': Next menu item. + * 's'/'arr_down': Previous menu item. + * 'f'/'ENTER': Select current menu item. + * 'BACKSPACE'/'ESC': Exit the menu. */ void minigame_menu(void); diff --git a/snake.c b/snake.c index 7d7a389..e2a74f3 100644 --- a/snake.c +++ b/snake.c @@ -1,6 +1,6 @@ -// -// Created by snapshot112 on 10/15/25. -// +/* + * Created by snapshot112 on 15/10/2025 + */ #define _POSIX_C_SOURCE 199309 diff --git a/snake.h b/snake.h index 21cda6b..0812b5e 100644 --- a/snake.h +++ b/snake.h @@ -1,7 +1,7 @@ /* - * Created by snapshot112 on 10/15/25. + * Created by snapshot112 on 15/10/2025 * - * A game of maze runner configured to run on the grid game engine. + * A game of maze runner build on the grid game engine. * * Please make sure to include and initialize the game engine before calling snake(); */ @@ -10,7 +10,7 @@ #define MINIGAME_MENU_SNAKE_H /* - * A game of snake configured to run on the grid game engine. + * A game of snake build on the grid game engine. * * Please make sure to include and initialize the game engine before calling snake(); * @@ -19,7 +19,7 @@ * * Controls: * Use WSAD or arrow keys to redirect the snake. - * Use BACKSPACE to exit the game early. + * Use BACKSPACE or ESCAPE to exit the game early. */ void snake(void); diff --git a/spel b/spel index df382ac93a4caf85862c72ecb245603ae0084286..4af86fddcef89c594e1b9594bbd6ef95f7f9a077 100755 GIT binary patch delta 38602 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
|@8!yt+(4!EcAfawa^(!NL$@2*Kgzi6k)qcs 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%0DefH7ORP%du=Qf@>O~> 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 delta 38623 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 JeXK5A{|%8i$Fu+d diff --git a/spel.c b/spel.c index c7123a3..8643e70 100644 --- a/spel.c +++ b/spel.c @@ -1,7 +1,9 @@ /* + * Created by snapshot112 on 15/10/2025 + * * Naam: Jeroen Boxhoorn * UvAnetID: 16333969 - * Studie: BSc Informatica + * Studie: BSC Informatica * * A minigame menu that lets you play games on the grid game engine. * @@ -9,6 +11,8 @@ * - maze runner * - snake * - minesweeper + * + * A user manual can be found in the assets or by selected it in the menu using ENTER or 'f'. */ #include "grid_game_engine.h"