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