From 642ebc1f010da67f56328e92b9d9acc4591a323a Mon Sep 17 00:00:00 2001 From: Janos <janol55@zedat.fu-berlin.de> Date: Thu, 21 Mar 2024 13:52:28 +0100 Subject: [PATCH] Spiel wir jetzt nicht mehr mit exit(),sondern korrekt beendet --- gameLoop.c | 11 +++++++---- gameLoop.h | 2 +- main.c | 4 ++-- map.c | 4 ++-- menu2.c | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/gameLoop.c b/gameLoop.c index 6303bb7..96ae2e8 100644 --- a/gameLoop.c +++ b/gameLoop.c @@ -8,7 +8,7 @@ int playerhighscore; //V: enum vehicle exists with 4 correct themes, Renderer exists //N: renderer still exists, all objects are still exist or have been correctly removed //E: game has been played for one round, which was at least 16ms long -void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { +bool gameLoop(enum vehicle theme,SDL_Renderer* renderer) { SDL_Event e; int speed = 0; @@ -30,6 +30,7 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { bool start_game = false; //ends game if game over criteria have been met bool end_game = false; + bool quit_game = false; //used to implement rows and allows to remove rows out of view struct LinkedList *map = init_map(theme); @@ -48,7 +49,8 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { switch (e.type){ // if user closes window exit frees all used space case SDL_QUIT: - exit(0); + end_game = true; + quit_game = true; // any key input starts game and takes player input case SDL_KEYDOWN: start_game = true; @@ -72,7 +74,8 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { // Die Map wird bewegt und gezeichnet (inklusive Fahrzeuge) // Bei einer ungültigen Kollision wird das Spiel beendet - end_game = move_map(theme,speed,map,renderer); + if (!end_game) + end_game = move_map(theme,speed,map,renderer); // Wenn der Spieler nicht im Fenster zu sehen ist, dann wird das Spiel beendet if(player->y >= SCREEN_HEIGHT || player->x >=SCREEN_WIDTH || player->x <= -60){ @@ -98,5 +101,5 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { write_table(theme); //wir löschen die map free_map(map); - return; + return(quit_game); } diff --git a/gameLoop.h b/gameLoop.h index 5ba4871..4a5d9bd 100644 --- a/gameLoop.h +++ b/gameLoop.h @@ -22,6 +22,6 @@ extern int playerhighscore; //Declaration of functions -void gameLoop(enum vehicle,SDL_Renderer*); +bool gameLoop(enum vehicle,SDL_Renderer*); #endif \ No newline at end of file diff --git a/main.c b/main.c index 56ad1bc..5e07163 100644 --- a/main.c +++ b/main.c @@ -48,7 +48,6 @@ int main(void) { int theme; bool change_Map = true; - while (true) { if (change_Map){ @@ -57,7 +56,8 @@ int main(void) { if (theme == (-1)){ // Spiel wurde geschlossen oder es kam zu einem Fehler break; } - gameLoop(theme,renderer); + if (gameLoop(theme,renderer)) + break; change_Map = end_screen(renderer); } diff --git a/map.c b/map.c index 56f3e28..1970784 100644 --- a/map.c +++ b/map.c @@ -34,7 +34,7 @@ struct LinkedList* init_map(enum vehicle theme){ n->next = m; n = m; - for(int i = 0;i<10;i++){ + for(int i = 0;i<10000;i++){ struct Row *m; @@ -125,7 +125,7 @@ int move_map(enum vehicle theme,int delta_y,struct LinkedList *list, SDL_Rendere return(1); } } - + if (cur->next == NULL){ break; } diff --git a/menu2.c b/menu2.c index ff31ea7..5724d76 100644 --- a/menu2.c +++ b/menu2.c @@ -69,7 +69,7 @@ enum vehicle startscreen(SDL_Renderer* renderer){ switch (event.type) { case SDL_QUIT: - exit(0); + return(-1); case SDL_MOUSEBUTTONDOWN: if (0<=event.button.y && event.button.y<=200){ -- GitLab