wip
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
|||||||
|
# Clion files
|
||||||
|
.idea
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
*.d
|
*.d
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# Define a custom target to run the default 'make' command
|
# Define a custom target to run the default 'make' command
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
Week6
|
MinigameMenu
|
||||||
COMMAND ${MAKE_EXECUTABLE}
|
COMMAND ${MAKE_EXECUTABLE}
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Running make in the project directory..."
|
COMMENT "Running make in the project directory..."
|
||||||
@@ -15,7 +15,7 @@ add_custom_target(
|
|||||||
# Define a custom target to run 'make clean'
|
# Define a custom target to run 'make clean'
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
Week6Clean
|
Clean
|
||||||
COMMAND ${MAKE_EXECUTABLE} clean
|
COMMAND ${MAKE_EXECUTABLE} clean
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Running make clean in the project directory..."
|
COMMENT "Running make clean in the project directory..."
|
||||||
@@ -26,9 +26,9 @@ add_custom_target(
|
|||||||
# Define a custom target to run 'make clean'
|
# Define a custom target to run 'make clean'
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
Week6Tarball
|
Tarball
|
||||||
COMMAND ${MAKE_EXECUTABLE} tarball1
|
COMMAND ${MAKE_EXECUTABLE} tarball2
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Running make tarball in the project directory..."
|
COMMENT "Running make tarball in the project directory..."
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|||||||
50
rooster.c
50
rooster.c
@@ -15,6 +15,9 @@ typedef struct rooster_data {
|
|||||||
toestand state;
|
toestand state;
|
||||||
} rooster;
|
} rooster;
|
||||||
|
|
||||||
|
|
||||||
|
rooster *rooster_maak(char* input);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets a grids width and height
|
* Sets a grids width and height
|
||||||
*
|
*
|
||||||
@@ -201,6 +204,53 @@ int rooster_plaats(rooster *rp, int x, int y, char c) {
|
|||||||
return 0;
|
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) {
|
void rooster_zoek(const rooster *rp, char c, int *x, int *y) {
|
||||||
if (rp == NULL || rp->rost == NULL) {
|
if (rp == NULL || rp->rost == NULL) {
|
||||||
*x = -1;
|
*x = -1;
|
||||||
|
|||||||
38
rooster.h
38
rooster.h
@@ -53,10 +53,46 @@ rooster *rooster_lees(FILE *fh);
|
|||||||
* NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen
|
* NULL teruggegeven. (In dat geval blijft geen gereserveerd geheugen
|
||||||
* achter.)
|
* 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.
|
/* Vraag de huidige toestand van het spel op.
|
||||||
|
|
||||||
|
Input:
|
||||||
rp: een pointer naar het rooster.
|
rp: een pointer naar het rooster.
|
||||||
|
|
||||||
Uitvoer: de toestand.
|
Uitvoer: de toestand.
|
||||||
|
|||||||
42
spel.c
42
spel.c
@@ -30,6 +30,22 @@
|
|||||||
|
|
||||||
#include "rooster.h"
|
#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.
|
/* Toont het gegeven rooster met ncurses.
|
||||||
*
|
*
|
||||||
* Input:
|
* Input:
|
||||||
@@ -41,18 +57,7 @@
|
|||||||
void toon_rooster(rooster *rp) {
|
void toon_rooster(rooster *rp) {
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
int height = rooster_hoogte(rp);
|
toon_rooster_op_locatie(rp, 0, 0);
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_grid(rooster *rp, char c, int x, int y) {
|
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
|
* Speelt het spel met een gegeven rooster tot de toestand niet langer
|
||||||
* AAN_HET_SPELEN is.
|
* AAN_HET_SPELEN is.
|
||||||
*/
|
*/
|
||||||
void speel(rooster *rp) {
|
void speel(rooster *rp) {
|
||||||
toon_rooster(rp);
|
toon_menu(rp);
|
||||||
rooster_zet_toestand(rp, AAN_HET_SPELEN);
|
|
||||||
run_maze(rp);
|
|
||||||
maze_exit_screen(rp);
|
|
||||||
graceful_exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|||||||
44
voorbeeld.c
44
voorbeeld.c
@@ -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;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user