wip
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
||||
# Clion files
|
||||
.idea
|
||||
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
|
||||
50
rooster.c
50
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;
|
||||
|
||||
38
rooster.h
38
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.
|
||||
|
||||
42
spel.c
42
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[]) {
|
||||
|
||||
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