This commit is contained in:
2025-10-13 19:58:43 +02:00
parent 10c3545488
commit 9b1a8fcea9
8 changed files with 120 additions and 67 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,6 @@
# Clion files
.idea
# Prerequisites
*.d

View File

@@ -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,8 +26,8 @@ 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

View File

@@ -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;

View File

@@ -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.

BIN
spel Executable file

Binary file not shown.

42
spel.c
View File

@@ -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[]) {

View File

@@ -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 <ncurses.h>
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;
}