diff --git a/gameLoop.c b/gameLoop.c index 6303bb7f02741b384795ddfc16b41ab123525319..96ae2e8cea1196866b582c1bf54062df7011321d 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 5ba487158bd1b52b07f0376af8879330ce6fb37a..4a5d9bd1fc82e4942c611def5732ba42910f0a97 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 56ad1bcab84c7986183d0bfc87dece39a563040c..5e0716371871faa50a965ea549bd0e702b5f9767 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 56f3e287efe8f0f467e6d30cc2333b78427b4d9b..1970784a859ca58736423ab8b1155995dea1c0b3 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 ff31ea71d2b4b59ff3d7e22b1b7c85a364cd5416..5724d76f19d82677ffc0c62f1f3867f5a8a8e613 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){