diff --git a/gameLoop.c b/gameLoop.c index 6465f6a8acafe3a5f6b6557d5f449e9460daa62d..690afe325dd0e74178d978132e7b5c92d93a7436 100644 --- a/gameLoop.c +++ b/gameLoop.c @@ -2,9 +2,9 @@ #include <time.h> #include <stdbool.h> -void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { + +void gameLoop(enum vehicle theme,SDL_Renderer* renderer) { - int input; SDL_Event e; int speed; @@ -18,21 +18,17 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { playerscore = 0; playerhighscore = 0; - bool run = true; + bool end_game = false; bool start_game = false; SDL_Rect *character = &player; // erzeuge verkettete Liste, welche die Karte speichert - struct LinkedList *list = init_map(theme,character); + struct LinkedList *map = init_map(theme,character); Uint32 start = SDL_GetTicks(); - //move_map(theme,0,list,character,renderer); - // Menü - - //start_screen(theme,character, list, renderer); start_game = false; - while (run) { + while (!end_game) { while (SDL_PollEvent(&e)) { @@ -42,9 +38,10 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { exit(0); case SDL_KEYDOWN: - input = e.key.keysym.scancode; + start_game = true; - jump(input, character); + + jump(e.key.keysym.scancode, character); break; default: @@ -54,7 +51,8 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { // Wenn der Spieler weit oben ist, dann soll sich // die Kammera schneller bewegen - if (run){ + // Solange der Spieler sich noch nicht bewegt hat, bewegt sich die Karte nicht + if (!end_game){ if (!start_game){ speed = 0; }else if (character->y < 400){ @@ -64,9 +62,10 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { speed = 1; } - SDL_RenderClear(renderer); // Die Map wird bewegt und gezeichnet (inklusive Fahrzeuge) - run = !move_map(theme,speed,list,character,renderer); + // Bei einer ungültigen Kollision wird das Spiel beendet + SDL_RenderClear(renderer); + end_game = move_map(theme,speed,map,character,renderer); } //Position des Spielers wird aktualisiert und gezeichnet @@ -75,10 +74,12 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { SDL_RenderPresent(renderer); - SDL_UpdateWindowSurface(window); - if(character->y >= 965){ - run = false; + + + // Wenn der Spieler nicht im Fenster zu sehen ist, dann wird das Spiel beendet + if(character->y >= 1000){ + end_game = true; } // Spiel bekommt eine feste Aktuallisierungsrate von ~60 fps @@ -87,6 +88,6 @@ void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) { end = SDL_GetTicks(); } } - free_map(list); + free_map(map); return; } diff --git a/header.h b/header.h index b25c126d9525abec978a03a36557feeff4d36eeb..0f108699a9e5c68f4447684f8420e5c59f2c0fe8 100644 --- a/header.h +++ b/header.h @@ -62,7 +62,7 @@ struct LinkedList_Auto{ //Declarations of Functions -enum vehicle startscreen(SDL_Renderer*,SDL_Window*); +enum vehicle startscreen(SDL_Renderer*); struct Row* init_row(struct Row*, SDL_Rect *player); struct LinkedList* init_map(enum vehicle,SDL_Rect *player); @@ -84,11 +84,10 @@ bool kollision(SDL_Rect*,int,int); void jump(int, SDL_Rect*); int update_character(int,SDL_Rect*, SDL_Renderer*); void move_character(int,SDL_Rect*); -int start_screen(enum vehicle,SDL_Rect*, struct LinkedList*, SDL_Renderer*); bool end_screen(SDL_Renderer*); int init(SDL_Renderer*); -int exitGame(SDL_Renderer*, SDL_Window*); -void gameLoop(enum vehicle,SDL_Renderer*, SDL_Window*); +int exitGame(SDL_Renderer*,SDL_Window* window); +void gameLoop(enum vehicle,SDL_Renderer*); int title_screen(SDL_Renderer*); extern SDL_Rect player; diff --git a/init.c b/init.c index 9858012867203b7849d3df37df43c64f1616a3fd..705c56ebeb53d927b3786bffd7fe401fdeb69ef3 100644 --- a/init.c +++ b/init.c @@ -15,10 +15,10 @@ SDL_Texture *img_finishlineBright; SDL_Texture *img_finishlineDark; SDL_Texture *img_coin; SDL_Texture *img_Spielanleitung; -SDL_Texture *img_carLeft_trans; // https://www.pinterest.com/pin/365776800983879017/ -SDL_Texture *img_car_trans; +SDL_Texture *img_carLeft_trans; // https://www.anyrgb.com/en-clipart-szoog +SDL_Texture *img_car_trans; //https://www.anyrgb.com/en-clipart-szoog SDL_Texture *img_trainL; //https://www.pinterest.com/hassanhojabri/sprite/ -SDL_Texture *img_trainR; +SDL_Texture *img_trainR; //https://www.pinterest.com/hassanhojabri/sprite/ SDL_Texture *img_plank; //https://www.craiyon.com/image/_XEsXKthRYqpK8Vn6ZixAg SDL_Texture *img_duck; TTF_Font* font; @@ -45,14 +45,14 @@ int init(SDL_Renderer* renderer) { img_waterDarkMultiple = IMG_LoadTexture(renderer,"images/waterDarkMultiple.jpg"); img_finishlineBright = IMG_LoadTexture(renderer,"images/finishlineBright.jpg"); img_finishlineDark = IMG_LoadTexture(renderer,"images/finishlineDark.jpg"); - img_car_trans = IMG_LoadTexture(renderer,"images/new_car_trans.png"); // https://www.pinterest.com/pin/365776800983879017/ + img_car_trans = IMG_LoadTexture(renderer,"images/new_car_trans.png"); // Quelle: https://www.anyrgb.com/en-clipart-szoog img_carLeft_trans = IMG_LoadTexture(renderer,"images/new_carLeft_trans.png"); img_coin = IMG_LoadTexture(renderer,"images/coin.jpg"); img_Spielanleitung = IMG_LoadTexture(renderer,"images/Spielanleitung.png"); - img_trainL = IMG_LoadTexture(renderer,"images/trainL.png"); // https://www.pinterest.de/pin/645492559082244309/ - img_trainR = IMG_LoadTexture(renderer,"images/trainR.png"); - img_plank = IMG_LoadTexture(renderer,"images/plank.png"); - img_duck = IMG_LoadTexture(renderer,"images/duck.png"); + img_trainL = IMG_LoadTexture(renderer,"images/trainL.png"); // Quelle: https://www.pinterest.de/pin/645492559082244309/ + img_trainR = IMG_LoadTexture(renderer,"images/trainR.png"); // Quelle: https://www.pinterest.de/pin/645492559082244309/ + img_plank = IMG_LoadTexture(renderer,"images/plank.png"); // Quelle: https://www.craiyon.com/image/_XEsXKthRYqpK8Vn6ZixAg + img_duck = IMG_LoadTexture(renderer,"images/duck.png"); //Initiierung der Bilder int flags = IMG_INIT_PNG | IMG_INIT_JPG; diff --git a/main.c b/main.c index 1e8380a206768b37e0166bd82748e3f53c90bed6..a5ad2a12bec97ea11780014e502a290db878ad26 100644 --- a/main.c +++ b/main.c @@ -45,21 +45,25 @@ int main(void) { return(-1); } + title_screen(renderer); + enum vehicle theme; bool change_Map = true; - title_screen(renderer); + while (true) { + if (change_Map){ - theme = startscreen(renderer,window); + theme = startscreen(renderer); } if (theme == (-1)){ // Spiel wurde geschlossen oder es kam zu einem Fehler break; } - gameLoop(theme,renderer, window); + gameLoop(theme,renderer); change_Map = end_screen(renderer); } - exitGame(renderer, window); + exitGame(renderer,window); + return(0); } diff --git a/map.c b/map.c index 9051203962e838415544145bb1ddd3f69c0bc221..5a0c9af4e83a5f74464df1400f8cf247eaeb1ee3 100644 --- a/map.c +++ b/map.c @@ -69,10 +69,10 @@ struct LinkedList* init_map(enum vehicle theme,SDL_Rect* character){ // boat => ein Wasser wird generiert, wenn ein Reihe gelöscht wurde // // Nachbedingung: +// Wenn es zu einer ungültigen Kollision gibt, dann wird 1 zurückgegeben // Der Wert y_pos jeder Reihe wird um z erhöht // Eine Reihe wurde gelöscht, wenn y_pos >= 1000 // + neue Reihe mit Typ theme wurde an das Ende der Linked Ende hinzugefügt - int move_map(enum vehicle theme,int delta_y,struct LinkedList *list,SDL_Rect *character, SDL_Renderer* renderer){ struct Row *cur = list->head; diff --git a/menu2.c b/menu2.c index f7c445df4a15525235d9744b4023154b64971ea2..1cfa77909d72bffab36b525feb74de6b537e5206 100644 --- a/menu2.c +++ b/menu2.c @@ -9,9 +9,8 @@ // Die Funktion zeigt die möglichen Reihen des Spiels // Wenn man auf eine Reihe klickt, dann wir das Spiel mit einer bestimmten // Konfiguration gestartet -enum vehicle startscreen(SDL_Renderer* renderer,SDL_Window *window){ +enum vehicle startscreen(SDL_Renderer* renderer){ - SDL_RenderClear(renderer); if (TTF_Init() == -1) { SDL_Log("SDL_ttf konnte nicht initialisiert werden! SDL_ttf Error: %s\n", @@ -99,6 +98,7 @@ enum vehicle startscreen(SDL_Renderer* renderer,SDL_Window *window){ SDL_RenderCopy(renderer,Message,NULL,&rect); SDL_RenderPresent(renderer); - SDL_UpdateWindowSurface(window); + + SDL_RenderClear(renderer); } } \ No newline at end of file