diff --git a/Makefile b/Makefile index 738a3180ac0ea25ad2367fe9538ad6feb9822b84..39dab1ee2711ef7afb80d7fa7c4ac5f50671f34a 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CFLAGS=$(shell pkg-config --cflags sdl2 SDL2_image SDL2_ttf) -std=c99 -Wall -Wextra -pedantic -g -O0 CPPFLAGS=-MMD -MF $*.d # Generate dependency files LDLIBS=$(shell pkg-config --libs sdl2 SDL2_image SDL2_ttf) -lm -OBJ=output.o map.o rows.o auto.o charac.o main.o init.o gameLoop.o menu2.o title_screen.o file_own.o +OBJ=output.o map.o rows.o auto.o charac.o main.o init.o gameLoop.o menu2.o title_screen.o file_own.o bird.o CC=gcc all: main diff --git a/auto.c b/auto.c index 236f746604116a3ea39656e1319750b02ba8fb36..8ed62665f4ecd01bc8de9b52881c8bb71797ba4c 100644 --- a/auto.c +++ b/auto.c @@ -1,7 +1,7 @@ #include "hDateien/auto.h" // Vorbedinung: -// 0 < |speed| < 10, 0 < width < 500, 0 < height < 100, +// 0 < |speed| < 10, // -5000 <= pred_pos < 5000 <- Position des Vorgängerautos // 0 <= pred_width < 500 @@ -35,6 +35,8 @@ struct Car* init_race_car(int speed,int pred_pos,int pred_width){ } } + b->color = none; + return(b); } @@ -65,6 +67,9 @@ struct Car* init_train(int speed,int pred_pos,int pred_width){ b->x_pos = pred_pos - b->width - distance; } } + + b->color = none; + return(b); } @@ -78,7 +83,9 @@ struct Car* init_boat(int speed,int pred_pos,int pred_width){ int min_distance; int distance; - b->width = 200; + int p = (rand() % 2) + 2; + + b->width = 100 * p; b->height = 60; b->type = boat; @@ -86,7 +93,7 @@ struct Car* init_boat(int speed,int pred_pos,int pred_width){ b->x_pos = pred_pos; }else{ - min_distance = 50 * abs(speed); + min_distance = 50 * abs(speed)+(b->width/3); distance = (rand() % 300) + min_distance; if (speed < 0){ @@ -97,6 +104,8 @@ struct Car* init_boat(int speed,int pred_pos,int pred_width){ } return(b); + b->color = none; + } struct Car* init_coin(int speed,int pred_pos,int pred_width){ @@ -124,6 +133,8 @@ struct Car* init_coin(int speed,int pred_pos,int pred_width){ b->x_pos = pred_pos - b->width - distance; } + b->color = none; + return(b); } @@ -157,12 +168,21 @@ struct Car* init_car(int speed,int pred_pos,int pred_width){ } } + int p = rand() % 3; + if (p == 0){ + b->color = red; + }else if(p == 1){ + b->color = blue; + }else{ + b->color = green; + } + return(b); } // Vorbedinung: -// 0 < |speed| < 10, 0 < width < 500, 0 < height < 100, +// 0 < |speed| < 10, // 0 <= start_pos <= 900 // Nachbedingung: Initialisierte LinkedList von Autos, abhängig von den Parametern @@ -260,7 +280,7 @@ int move_car(SDL_Renderer* renderer,struct Row *n){ }else if (cur -> type == boat){ onBoat = true; - + center_water(cur->x_pos,cur->width); }else if(cur ->type == coin){ playerscore += 5; @@ -272,7 +292,7 @@ int move_car(SDL_Renderer* renderer,struct Row *n){ } cur->x_pos += n->speed; - paste_car(renderer,cur->x_pos,n->y_pos,cur->width,cur->height,n->speed,cur->type); + paste_car(renderer,cur->x_pos,n->y_pos,cur->width,cur->height,n->speed,cur->type,cur->color); if (cur->next == NULL){ break; diff --git a/bird.c b/bird.c new file mode 100644 index 0000000000000000000000000000000000000000..f0a8cd55784c76b6a6c23e610141dd53786ec3c0 --- /dev/null +++ b/bird.c @@ -0,0 +1,35 @@ +#include "hDateien/bird.h" + + +struct bird* init_bird(int x_pos,int y_pos){ + struct bird *b = malloc(sizeof(*b)); + if(b == NULL){ + perror("kein Speicheeplatz"); + } + + b->speed = -3;//(((rand() % 2)*2) -1)*3 + b->x_pos = x_pos; + b->y_pos = y_pos;//(rand() % 10) * ROW_SIZE + + b->height = 80; + b->width = 80 ; + b->anim = 0; + + return(b); +} + +bool move_bird(SDL_Renderer* renderer,struct bird *b,int speed){ + if (b->anim) + b->x_pos += b->speed; + b->y_pos += speed; + paste_bird(renderer,b->x_pos+10,b->y_pos+10,b->height,b->width,b->anim); + if (b->anim){ + b->anim = (b->anim + 1) % 16; + if (b->anim == 0) + b->anim++; + } + if ((b->x_pos < -b->width && b->speed < 0) || (b->x_pos > 1000 && b->speed > 0) ){ + return(true); + } + return(false); +} \ No newline at end of file diff --git a/charac.c b/charac.c index 40905f08a13274ccc6ec5e7f55b81d0081d33077..1ce23b1d4aabb96a4a7932dbedc028907dffa423 100644 --- a/charac.c +++ b/charac.c @@ -108,3 +108,14 @@ void recenter_player(void){ player->x = (i-50) + 8*ROW_SIZE; // Spieler steht ganz rechts, dann verschiebe um 20 nach links mit Offset von 8 Kästen } + +void center_water(int x_pos,int x_width){ + int i = 70; + for(int j = 0;j<x_width/ROW_SIZE;j++){ + if (player->x < x_pos +i+ j * ROW_SIZE){ + player->x = x_pos + (i-50) + j * ROW_SIZE ; + return; + } + } + player->x = x_pos +(i-50)+ (x_width-ROW_SIZE) ; +} \ No newline at end of file diff --git a/gameLoop.c b/gameLoop.c index 42573151d3d619c7fbd7781db40e304a39d0fb15..5cb97f2d8ebb26bbef063c0f40eef6de26a64aa8 100644 --- a/gameLoop.c +++ b/gameLoop.c @@ -34,7 +34,7 @@ bool gameLoop(enum vehicle theme,SDL_Renderer* renderer) { int last_move; //used to implement rows and allows to remove rows out of view - struct LinkedList *map = init_map(theme); + struct LinkedList *map = init_map(theme); //every at least 16ms this loop is called while (!end_game) { @@ -86,8 +86,11 @@ bool gameLoop(enum vehicle theme,SDL_Renderer* renderer) { end_game = true; } + //Position des Spielers wird aktualisiert und gezeichnet update_character(speed, renderer); + + //Der aktuelle Score wird oben rechts angezeigt paste_score (renderer); diff --git a/hDateien/auto.h b/hDateien/auto.h index 84cb9e1872ca37aff4a9e5efc03455686b2fd76e..d4af8296d7d00e25428fcd01c22f8272c98e3a02 100644 --- a/hDateien/auto.h +++ b/hDateien/auto.h @@ -7,6 +7,7 @@ #include <stdbool.h> #include "output.h" #include "header.h" +#include "charac.h" //Declarations of functions diff --git a/hDateien/bird.h b/hDateien/bird.h new file mode 100644 index 0000000000000000000000000000000000000000..21e90e60af346c8c07e97a90595cdf4772933a2b --- /dev/null +++ b/hDateien/bird.h @@ -0,0 +1,15 @@ +#ifndef BiRD_H +#define BIRD_H + +#include <stdlib.h> +#include "main.h" +#include "output.h" +#include <SDL_render.h> +#include "header.h" +#include "stdbool.h" + +struct bird* init_bird(int,int); + +bool move_bird(SDL_Renderer* renderer,struct bird *b,int); + +#endif \ No newline at end of file diff --git a/hDateien/charac.h b/hDateien/charac.h index d2a38b0b14c0b8e551d20cb7d754df4367ea3992..ffd4a5a82ca11038c147b41f01c98134ec42b59b 100644 --- a/hDateien/charac.h +++ b/hDateien/charac.h @@ -28,4 +28,6 @@ int update_character(int,SDL_Renderer*); void recenter_player(void); +void center_water(int,int); + #endif \ No newline at end of file diff --git a/hDateien/gameLoop.h b/hDateien/gameLoop.h index 4a5d9bd1fc82e4942c611def5732ba42910f0a97..4b3e885d5144ced95236c6d305f112d3c65d4530 100644 --- a/hDateien/gameLoop.h +++ b/hDateien/gameLoop.h @@ -13,6 +13,7 @@ #include "file_own.h" #include "header.h" #include "charac.h" +#include "bird.h" diff --git a/hDateien/header.h b/hDateien/header.h index f41ae3d073c2e620aaf89981d10a19b96bef5032..28a3a974b971d6bddac8992cfb21c9d426272228 100644 --- a/hDateien/header.h +++ b/hDateien/header.h @@ -9,6 +9,22 @@ extern SDL_Rect *player; extern int playerscore; extern int playerhighscore; +enum color{ + red, + blue, + green, + none +}; + +struct bird{ + int x_pos; + int y_pos; + int speed; + int height; + int width; + int anim; +}; + enum row{ grassBright, grassDark, @@ -34,6 +50,7 @@ struct Car{ int x_pos; int width; int height; + enum color color; struct Car *next; }; @@ -46,6 +63,7 @@ struct Row{ int y_pos; int speed; int stone; + struct bird *bird; struct LinkedList_car *cars; }; diff --git a/hDateien/init.h b/hDateien/init.h index 709518da7b4030bed9fdda50b71bf0ac3e2561f9..ace8f6f1e86b8a2b04c46e7651e978486df62162 100644 --- a/hDateien/init.h +++ b/hDateien/init.h @@ -40,5 +40,24 @@ extern SDL_Texture *img_stone; extern SDL_Texture *img_race_street; extern SDL_Texture *img_race_carL; extern SDL_Texture *img_race_carR; +extern SDL_Texture *img_car_blueR; +extern SDL_Texture *img_car_blueL; +extern SDL_Texture *img_car_greenR; +extern SDL_Texture *img_car_greenL; +extern SDL_Texture *img_bird0; +extern SDL_Texture *img_bird1; +extern SDL_Texture *img_bird2; +extern SDL_Texture *img_bird3; +extern SDL_Texture *img_bird4; +extern SDL_Texture *img_bird5; +extern SDL_Texture *img_bird6; +extern SDL_Texture *img_bird7; +extern SDL_Texture *img_bird_sit0; +extern SDL_Texture *img_bird_sit1; +extern SDL_Texture *img_bird_sit2; +extern SDL_Texture *img_bird_sit3; +extern SDL_Texture *img_bird_sit4; + + #endif \ No newline at end of file diff --git a/hDateien/map.h b/hDateien/map.h index 3618715a84cb6c52cbade8ec1e6814fead3e7add..d16bd8285cbe9a977620bbeb2414bf3e128f0009 100644 --- a/hDateien/map.h +++ b/hDateien/map.h @@ -11,7 +11,7 @@ //#include "gameLoop.h" #include "output.h" #include "charac.h" - +#include "bird.h" #include "header.h" //Declaration of functions diff --git a/hDateien/output.h b/hDateien/output.h index 1910ed21dbc0e46e2b2f00f8d47c95808e9733c0..b3fe993cfbb17eb4fac5d9a88ad1f1e2daf07db1 100644 --- a/hDateien/output.h +++ b/hDateien/output.h @@ -19,8 +19,8 @@ //Declaration of functions int paste_stone(SDL_Renderer*,int,int); int paste_row(SDL_Renderer*, int , enum row); -int paste_car(SDL_Renderer*, int, int, int, int,int,enum vehicle); +int paste_car(SDL_Renderer*, int, int, int, int,int,enum vehicle,enum color); int paste_score (SDL_Renderer*); - +int paste_bird(SDL_Renderer*,int,int,int,int,int); #endif diff --git a/hDateien/rows.h b/hDateien/rows.h index 07d2a7c721a6252aebfd19eae21ea6d675d8a203..b637cbbd08e5e6553212ef6f873294ae58615816 100644 --- a/hDateien/rows.h +++ b/hDateien/rows.h @@ -8,9 +8,10 @@ //#include "gameLoop.h" #include "auto.h" //#include "main.h" - +#include "bird.h" #include "header.h" + //Declaration of functions int gen_stone(); diff --git a/images/bird0.png b/images/bird0.png new file mode 100644 index 0000000000000000000000000000000000000000..c567b18d30bbf01d0ad04534102d304d40b2c764 Binary files /dev/null and b/images/bird0.png differ diff --git a/images/bird1.png b/images/bird1.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4cf79cc92373aff1c95b0e4a075e81cbb25c0c Binary files /dev/null and b/images/bird1.png differ diff --git a/images/bird2.png b/images/bird2.png new file mode 100644 index 0000000000000000000000000000000000000000..1565e39d0adc01579700786013307d6aff6d9175 Binary files /dev/null and b/images/bird2.png differ diff --git a/images/bird3.png b/images/bird3.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d1c0a8cdd039a48c62beccc8f689b20fa30494 Binary files /dev/null and b/images/bird3.png differ diff --git a/images/bird4.png b/images/bird4.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbf85bd92dc10d5b44a249e64454722239945a2 Binary files /dev/null and b/images/bird4.png differ diff --git a/images/bird5.png b/images/bird5.png new file mode 100644 index 0000000000000000000000000000000000000000..56d7a3fde3a89b3c6da35eebb47768e51de5b8f4 Binary files /dev/null and b/images/bird5.png differ diff --git a/images/bird6.png b/images/bird6.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0dca61ee3e3ce17f47bf3854badef1730c925d Binary files /dev/null and b/images/bird6.png differ diff --git a/images/bird7.png b/images/bird7.png new file mode 100644 index 0000000000000000000000000000000000000000..95b47567b0f8df31521bde8a943fa064d9c432ac Binary files /dev/null and b/images/bird7.png differ diff --git a/images/bird_sit0.png b/images/bird_sit0.png new file mode 100644 index 0000000000000000000000000000000000000000..4806e16e8421b6b6f2b07971576dfd0bab9553cf Binary files /dev/null and b/images/bird_sit0.png differ diff --git a/images/bird_sit1.png b/images/bird_sit1.png new file mode 100644 index 0000000000000000000000000000000000000000..259c057ffa81a39bff7f26ed90b257c9d93b2796 Binary files /dev/null and b/images/bird_sit1.png differ diff --git a/images/bird_sit2.png b/images/bird_sit2.png new file mode 100644 index 0000000000000000000000000000000000000000..e43fea08f6772384063471021d9ec6015dd0f34a Binary files /dev/null and b/images/bird_sit2.png differ diff --git a/images/bird_sit3.png b/images/bird_sit3.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b3691d036a85e4be476131ff0681a8bb97caaf Binary files /dev/null and b/images/bird_sit3.png differ diff --git a/images/bird_sit4.png b/images/bird_sit4.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed1eb26dd7de73f3d0514e2a45245f957854c5e Binary files /dev/null and b/images/bird_sit4.png differ diff --git a/images/carLeft_blue.png b/images/carLeft_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..c46b734853e1fee682e2bcd54d5070e556670f16 Binary files /dev/null and b/images/carLeft_blue.png differ diff --git a/images/carLeft_green.png b/images/carLeft_green.png new file mode 100644 index 0000000000000000000000000000000000000000..f0946bdfc02836bf39d641d3742c680a90116f62 Binary files /dev/null and b/images/carLeft_green.png differ diff --git a/images/carRight_blue.png b/images/carRight_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..22de8a910cf72dc7bb942f3dcbc9cfb0c8354e78 Binary files /dev/null and b/images/carRight_blue.png differ diff --git a/images/carRight_green.png b/images/carRight_green.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b9ff3a2c32c2cbc942de53334d630b474ba1c0 Binary files /dev/null and b/images/carRight_green.png differ diff --git a/init.c b/init.c index 9b79a4f43e5c3060ccfa8262c9a006b9203fecd4..11f1d59546a3d562d75bca70f329ee5bf580def5 100644 --- a/init.c +++ b/init.c @@ -25,6 +25,24 @@ SDL_Texture *img_stone; SDL_Texture *img_race_street; SDL_Texture *img_race_carL; SDL_Texture *img_race_carR; +SDL_Texture *img_car_blueR; // Quelle: https://www.clipartmax.com/max/m2H7G6d3m2N4i8G6/ +SDL_Texture *img_car_blueL; +SDL_Texture *img_car_greenR; +SDL_Texture *img_car_greenL; +SDL_Texture *img_bird0; // Quelle: https://ma9ici4n.itch.io/pixel-art-bird-16x16 +SDL_Texture *img_bird1; +SDL_Texture *img_bird2; +SDL_Texture *img_bird3; +SDL_Texture *img_bird4; +SDL_Texture *img_bird5; +SDL_Texture *img_bird6; +SDL_Texture *img_bird7; +SDL_Texture *img_bird_sit0; +SDL_Texture *img_bird_sit1; +SDL_Texture *img_bird_sit2; +SDL_Texture *img_bird_sit3; +SDL_Texture *img_bird_sit4; + TTF_Font* font; SDL_Window* init_window(){ @@ -93,10 +111,28 @@ int init_images(SDL_Renderer* renderer) { img_plank = IMG_LoadTexture(renderer,"images/plank.png"); // Quelle: https://www.craiyon.com/image/_XEsXKthRYqpK8Vn6ZixAg img_duck = IMG_LoadTexture(renderer,"images/duck.png"); img_3D_Duck = IMG_LoadTexture(renderer,"images/3D_Duck.png"); - img_stone = IMG_LoadTexture(renderer,"images/stone.png"); + img_stone = IMG_LoadTexture(renderer,"images/stone.png"); // Quelle: https://www.vecteezy.com/vector-art/22285554-stones-in-pixel-art-style img_race_street = IMG_LoadTexture(renderer,"images/race_street.jpg"); - img_race_carL = IMG_LoadTexture(renderer,"images/race_carL.png"); + img_race_carL = IMG_LoadTexture(renderer,"images/race_carL.png"); // Quelle: https://www.vecteezy.com/vector-art/33530269-pixel-art-illustration-f1-car-pixelated-race-f1-car-f1-car-race-vehicle-pixelated-for-the-pixel-art-game-and-icon-for-website-and-video-game-old-school-retro img_race_carR = IMG_LoadTexture(renderer,"images/race_carR.png"); + img_car_blueL = IMG_LoadTexture(renderer,"images/carLeft_blue.png"); + img_car_blueR = IMG_LoadTexture(renderer,"images/carRight_blue.png"); + img_car_greenR = IMG_LoadTexture(renderer,"images/carRight_green.png"); + img_car_greenL = IMG_LoadTexture(renderer,"images/carLeft_green.png"); + img_bird0 = IMG_LoadTexture(renderer,"images/bird0.png"); + img_bird1 = IMG_LoadTexture(renderer,"images/bird1.png"); + img_bird2 = IMG_LoadTexture(renderer,"images/bird2.png"); + img_bird3 = IMG_LoadTexture(renderer,"images/bird3.png"); + img_bird4 = IMG_LoadTexture(renderer,"images/bird4.png"); + img_bird5 = IMG_LoadTexture(renderer,"images/bird5.png"); + img_bird6 = IMG_LoadTexture(renderer,"images/bird6.png"); + img_bird7 = IMG_LoadTexture(renderer,"images/bird7.png"); + img_bird_sit0 = IMG_LoadTexture(renderer,"images/bird_sit0.png"); + img_bird_sit1 = IMG_LoadTexture(renderer,"images/bird_sit1.png"); + img_bird_sit2 = IMG_LoadTexture(renderer,"images/bird_sit2.png"); + img_bird_sit3 = IMG_LoadTexture(renderer,"images/bird_sit3.png"); + img_bird_sit4 = IMG_LoadTexture(renderer,"images/bird_sit4.png"); + //Initiierung der Bilder int flags = IMG_INIT_PNG | IMG_INIT_JPG; @@ -148,6 +184,23 @@ int exitGame(SDL_Renderer* renderer, SDL_Window* window) { SDL_DestroyTexture(img_race_street); SDL_DestroyTexture(img_race_carL); SDL_DestroyTexture(img_race_carR); + SDL_DestroyTexture(img_car_blueL); + SDL_DestroyTexture(img_car_blueR); + SDL_DestroyTexture(img_car_greenR); + SDL_DestroyTexture(img_car_greenL); + SDL_DestroyTexture(img_bird0); + SDL_DestroyTexture(img_bird1); + SDL_DestroyTexture(img_bird2); + SDL_DestroyTexture(img_bird3); + SDL_DestroyTexture(img_bird4); + SDL_DestroyTexture(img_bird5); + SDL_DestroyTexture(img_bird6); + SDL_DestroyTexture(img_bird7); + SDL_DestroyTexture(img_bird_sit0); + SDL_DestroyTexture(img_bird_sit1); + SDL_DestroyTexture(img_bird_sit2); + SDL_DestroyTexture(img_bird_sit3); + SDL_DestroyTexture(img_bird_sit4); TTF_CloseFont(font); SDL_Quit(); diff --git a/map.c b/map.c index a1df89b491fe9c6bafe8dcaddee24f44f4a6e68d..fa66bcfe890b45b76330af15ca52da6d2df2d83e 100644 --- a/map.c +++ b/map.c @@ -124,17 +124,24 @@ int move_map(enum vehicle theme,int delta_y,struct LinkedList *list, SDL_Rendere playerscore--; }else if(last_move == 5){ player->y += ROW_SIZE; - player->x += ROW_SIZE; + player->x += ROW_SIZE; playerscore--; }else if(last_move == 6){ player->y += ROW_SIZE; - player->x -= ROW_SIZE; + player->x -= ROW_SIZE; playerscore--; } - } } + if (cur->bird != NULL){ + if (cur->bird->anim == 0 && ((abs(player->y - cur->bird->y_pos) < 2*ROW_SIZE) && (abs(player->x - cur->bird->x_pos) < 2*ROW_SIZE))) + cur->bird->anim++; + move_bird(renderer,cur->bird,delta_y); + //paste_bird(renderer,cur->bird->x_pos,cur->bird->y_pos,cur->bird->height,cur->width,cur->bird->anim); + + } + if (cur->y_pos <= player->y && player->y <= cur->y_pos + ROW_SIZE && (cur->row_type == waterBrightSingle || cur->row_type == waterBrightMultiple || cur->row_type == waterDarkSingle || cur->row_type == waterDarkMultiple)){ @@ -203,6 +210,9 @@ void free_map(struct LinkedList *map){ if (temp->cars != NULL){ free_car(temp); } + if (temp->bird != NULL){ + free(temp->bird); + } free(temp); } diff --git a/output.c b/output.c index 41fe92540f6b36954114dd467a2c0e8d9827d2af..74e50d92e2e163eda2a6a4948fade04588c28ed5 100644 --- a/output.c +++ b/output.c @@ -82,7 +82,7 @@ int paste_row(SDL_Renderer* renderer, int y, enum row row_type){ //V renderer exists, correct x, y coordinates and width and height and speed and type of car is passed on //N: car is set to correct variables and displayed in renderer with correct image and direction -int paste_car(SDL_Renderer* renderer, int x, int y, int width, int height,int speed,enum vehicle type) { +int paste_car(SDL_Renderer* renderer, int x, int y, int width, int height,int speed,enum vehicle type,enum color color) { //Prevents cars from being displayed at the wrong position int offset = 20; @@ -109,20 +109,48 @@ int paste_car(SDL_Renderer* renderer, int x, int y, int width, int height,int sp } return(0); }else if(type == car){ - if (speed > 0) { - if (SDL_RenderCopy(renderer, img_car_trans, NULL, &rect) != 0) { - SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); - return(1); - } - return(0); - }else { - if (SDL_RenderCopy(renderer, img_carLeft_trans, NULL, &rect) != 0) { - SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); - return(1); - } + if (color == red){ + if (speed > 0) { + if (SDL_RenderCopy(renderer, img_car_trans, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + return(0); + }else { + if (SDL_RenderCopy(renderer, img_carLeft_trans, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + } + }else if (color == blue){ + if (speed > 0) { + if (SDL_RenderCopy(renderer, img_car_blueR, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + return(0); + }else { + if (SDL_RenderCopy(renderer, img_car_blueL, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + } + return(0); + }else if (color == green){ + if (speed > 0) { + if (SDL_RenderCopy(renderer, img_car_greenR, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + return(0); + }else { + if (SDL_RenderCopy(renderer, img_car_greenL, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }return(0); } - }else if(type == race_car){ if (speed > 0){ @@ -223,3 +251,67 @@ int paste_score (SDL_Renderer* renderer) { SDL_DestroyTexture(Message); return 0; } + + +int paste_bird(SDL_Renderer* renderer,int x_pos,int y_pos,int height,int width,int anim){ + + SDL_Rect rect = { + .x = x_pos, + .y = y_pos, + .w = height, + .h = width}; + if (anim == 0){ + if (SDL_RenderCopy(renderer, img_bird_sit0, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if (anim <= 1){ + + if (SDL_RenderCopy(renderer, img_bird0, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if (anim <= 3){ + if (SDL_RenderCopy(renderer, img_bird1, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if (anim <= 5){ + if (SDL_RenderCopy(renderer, img_bird2, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if (anim <= 7){ + if (SDL_RenderCopy(renderer, img_bird3, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if (anim <= 9){ + if (SDL_RenderCopy(renderer, img_bird4, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if(anim <= 11){ + if (SDL_RenderCopy(renderer, img_bird5, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if(anim <= 13){ + if (SDL_RenderCopy(renderer, img_bird6, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if(anim <= 15){ + if (SDL_RenderCopy(renderer, img_bird7, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + }else if(anim <= 17){ + if (SDL_RenderCopy(renderer, img_bird_sit0, NULL, &rect) != 0) { + SDL_Log("Bild konnte nicht kopiert werden! SDL_Error Error: %s\n",SDL_GetError()); + return(1); + } + } + + return(0); +} \ No newline at end of file diff --git a/rows.c b/rows.c index 11b7d323e81186ab0b99df0baeb16fec318936d7..5186ed1ff3126549847870dff7dfd227df4478aa 100644 --- a/rows.c +++ b/rows.c @@ -17,7 +17,7 @@ struct Row *race(int y_pos){ n->speed = (((rand()%2) * 2) -1) * 16; n->cars = init_car_list(n->speed,(900-n->speed) % 900,race_car); n->stone = -1; - + n->bird = NULL; return(n); } @@ -38,13 +38,23 @@ struct Row* grass(bool dark,bool gold,int y_pos){ n->row_type = grassDark; } n->stone = -1; + n->bird = NULL; }else{ if (dark){ n->row_type = grassDark; }else{ n->row_type = grassBright; } - n->stone = gen_stone(); + + int p = rand() % 10; + if (p < 5){ + n->stone = gen_stone(); + n->bird = NULL; + }else{ + p = (rand() % 10) * ROW_SIZE; + n->bird = init_bird(p,y_pos); + n->stone = -1; + } } n->y_pos = y_pos; n->cars = NULL; @@ -71,6 +81,7 @@ struct Row* street(bool first,int y_pos){ n->speed = (((rand()%2) * 2) -1) * ((rand()%3)+2); n->cars = init_car_list(n->speed,(900-n->speed) % 900,car); n->stone = -1; + n->bird = NULL; return(n); } //Vorbedingung: -200<=y_pos<=1000 @@ -88,6 +99,7 @@ struct Row* track(int y_pos){ n->speed = 7 *(((rand()%2)*2)-1); n->cars = init_car_list(n->speed,(SCREEN_WIDTH-n->speed) % SCREEN_WIDTH,train); n->stone = -1; + n->bird = NULL; return(n); } @@ -119,6 +131,7 @@ struct Row* water(bool first,bool dark,int y_pos){ n->speed = 2 *(((rand()%2)*2)-1); n->cars = init_car_list(n->speed,(SCREEN_WIDTH-n->speed)%SCREEN_WIDTH,boat); n->stone = -1; + n->bird = NULL; return(n); } @@ -205,7 +218,7 @@ struct Row* init_row(struct Row *m){ } // Nach einer Straße kommt mit einer Wahrschinlichkeit von: - // 2/3 => Gras + // 2/5 => Gras // 3/5 => Straße }else if (m->row_type == streetSingle || m->row_type == streetMultiple){