diff --git a/.gitignore b/.gitignore index 845cda6..a8c62f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Clion files +.idea + # Prerequisites *.d diff --git a/CMakeLists.txt b/CMakeLists.txt index e21b91c..d5a3645 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # Define a custom target to run the default 'make' command # ------------------------------------------------------------------ add_custom_target( - Week6 + MinigameMenu COMMAND ${MAKE_EXECUTABLE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running make in the project directory..." @@ -15,7 +15,7 @@ add_custom_target( # Define a custom target to run 'make clean' # ------------------------------------------------------------------ add_custom_target( - Week6Clean + Clean COMMAND ${MAKE_EXECUTABLE} clean WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running make clean in the project directory..." @@ -26,9 +26,9 @@ add_custom_target( # Define a custom target to run 'make clean' # ------------------------------------------------------------------ add_custom_target( - Week6Tarball - COMMAND ${MAKE_EXECUTABLE} tarball1 + Tarball + COMMAND ${MAKE_EXECUTABLE} tarball2 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running make tarball in the project directory..." VERBATIM -) \ No newline at end of file +) diff --git a/voorbeeld_doolhof.txt b/assets/voorbeeld_doolhof.txt similarity index 100% rename from voorbeeld_doolhof.txt rename to assets/voorbeeld_doolhof.txt diff --git a/rooster.c b/rooster.c index d0c1b84..0b25756 100644 --- a/rooster.c +++ b/rooster.c @@ -15,6 +15,9 @@ typedef struct rooster_data { toestand state; } rooster; + +rooster *rooster_maak(char* input); + /* * Sets a grids width and height * @@ -201,6 +204,53 @@ int rooster_plaats(rooster *rp, int x, int y, char c) { return 0; } +char *rooster_als_string(const rooster *rp) { + if (rp != NULL && rp->rost != NULL) { + char *string = malloc(sizeof(rp->rost)); + if (string == NULL) { + return NULL; + } + memcpy(string, rp->rost, sizeof(rp->rost)); + return string; + } + return NULL; +} + +char *rooster_vraag_rij(const rooster *rp, int y) { + if (rp != NULL && rp->rost != NULL && rooster_bevat(rp, 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'; + 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); + + char *grid = malloc(grid_memory); + if (grid == NULL) { + return NULL; + } + + rooster *new_rooster = malloc(sizeof(*rp)); + if (new_rooster == NULL) { + return NULL; + } + + memcpy(grid, rp->rost, grid_memory); + + memcpy(new_rooster, rp, sizeof(*rp)); + + new_rooster->rost = grid; + return new_rooster; + } + return NULL; +} + void rooster_zoek(const rooster *rp, char c, int *x, int *y) { if (rp == NULL || rp->rost == NULL) { *x = -1; diff --git a/rooster.h b/rooster.h index 5ce54c9..7933fd1 100644 --- a/rooster.h +++ b/rooster.h @@ -53,10 +53,46 @@ rooster *rooster_lees(FILE *fh); * NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen * achter.) */ -rooster *rooster_maak(char* template); +rooster *rooster_maak(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); + +/* + * Haal het hele rooster op in de vorm van een string. + * + * Input: + * rp: Een pointer naar het rooster. + * + * Output: + * Een pointer naar een string met daarin het hele rooster, + * regels zijn gescheiden door '/n' karakters. + */ +char *rooster_als_string(const rooster *rp); /* Vraag de huidige toestand van het spel op. + Input: rp: een pointer naar het rooster. Uitvoer: de toestand. diff --git a/spel b/spel new file mode 100755 index 0000000..b1fb5bc Binary files /dev/null and b/spel differ diff --git a/spel.c b/spel.c index 24914d2..3b58c1f 100644 --- a/spel.c +++ b/spel.c @@ -30,6 +30,22 @@ #include "rooster.h" +typedef struct { + char name[100]; + rooster *game_map; +} game_maps; + +void toon_rooster_op_locatie(rooster *rp, int starting_x, int starting_y) { + int height = rooster_hoogte(rp); + + for (int y = 0; y < height; y++) { + char *rij = rooster_vraag_rij(rp, y); + mvprintw(starting_y + y, starting_x, "%s", rij); + free(rij); + } + refresh(); +} + /* Toont het gegeven rooster met ncurses. * * Input: @@ -41,18 +57,7 @@ void toon_rooster(rooster *rp) { clear(); - int height = rooster_hoogte(rp); - int width = rooster_breedte(rp); - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - if (rooster_bevat(rp, x, y) == 1) - { - mvaddch(y, x, rooster_kijk(rp, x, y)); - } - } - } - refresh(); + toon_rooster_op_locatie(rp, 0, 0); } void update_grid(rooster *rp, char c, int x, int y) { @@ -211,17 +216,20 @@ void graceful_exit() { } } +void toon_menu(rooster *rp) { + toon_rooster(rp); + rooster_zet_toestand(rp, AAN_HET_SPELEN); + run_maze(rp); + maze_exit_screen(rp); + graceful_exit(); +} /* * Speelt het spel met een gegeven rooster tot de toestand niet langer * AAN_HET_SPELEN is. */ void speel(rooster *rp) { - toon_rooster(rp); - rooster_zet_toestand(rp, AAN_HET_SPELEN); - run_maze(rp); - maze_exit_screen(rp); - graceful_exit(); + toon_menu(rp); } int main(int argc, char *argv[]) { diff --git a/voorbeeld.c b/voorbeeld.c deleted file mode 100644 index a1862dd..0000000 --- a/voorbeeld.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Voorbeeldje van het gebruik van ncurses. - In dit voorbeeld kun je alleen met een + naar links en naar rechts wandelen - over een lijn van -. -*/ - -#include - -int RANGE = 20; - -/* Toont de situatie met ncurses. - - pos: de positie van de +. -*/ -void laat_zien(int pos) { - clear(); // begin met een nieuw ncurses scherm - for (int i = 0; i < RANGE; i++) { - addch(i == pos ? '+' : '-'); - } - refresh(); // zorg dat het scherm ook echt getoond wordt -} - -int main(void) { - // Initialiseer ncurses - initscr(); - cbreak(); // zodat je kunt onderbreken met Ctrl+C - keypad(stdscr, TRUE); // luister ook naar extra toetsen zoals pijltjes - noecho(); // druk niet de letters af die je intypt - - int pos = RANGE / 2; // begin in het midden van de lijn. - while (1) { - laat_zien(pos); - int toets = getch(); - switch (toets) { - case KEY_LEFT: - pos--; - break; - case KEY_RIGHT: - pos++; - break; - } - } - - return 0; -}