diff --git a/main.c b/main.c index cfacfc06f90656c020e93f1d99771a6e5566db2d..b314ab15f9ee120e00fa4a1aa693715e16819292 100644 --- a/main.c +++ b/main.c @@ -64,6 +64,7 @@ struct textures_s{ SDL_Texture* background; /*!< Texture liée à l'image du fond de l'écran. */ + SDL_Texture* ship; /*!< Texture liée à l'image du vaisseau. */ /* A COMPLETER */ }; @@ -75,14 +76,25 @@ struct textures_s{ typedef struct textures_s textures_t; +/** + * \brief Représentation pour stocker les données du vaisseau + * + */ +struct sprite_s{ + int x; + int y; + int w; + int h; +}; + +typedef struct sprite_s sprite_t; + /** * \brief Représentation du monde du jeu */ struct world_s{ - /* - A COMPLETER - */ + sprite_t *vaisseau ; /*!< Représentation du vaisseau */ int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */ @@ -95,7 +107,14 @@ struct world_s{ typedef struct world_s world_t; +/** + * \brief Fonction qui affiche les données du vaisseau + * + */ +void print_sprite(sprite_t *sprite){ + printf("x = %d, y = %d, w = %d, h = %d\n", sprite->x, sprite->y, sprite->w, sprite->h); +} /** @@ -108,10 +127,20 @@ void init_data(world_t * world){ //on n'est pas à la fin du jeu world->gameover = 0; - + + // Initialisation du vaisseau + world->vaisseau = malloc(sizeof(sprite_t)); + world->vaisseau->x = SCREEN_WIDTH/2 - SHIP_SIZE/2; + world->vaisseau->y = SCREEN_HEIGHT - SHIP_SIZE; + world->vaisseau->w = SHIP_SIZE; + world->vaisseau->h = SHIP_SIZE; + + print_sprite(world->vaisseau); } + + /** * \brief La fonction nettoie les données du monde * \param world les données du monde @@ -120,7 +149,7 @@ void init_data(world_t * world){ void clean_data(world_t *world){ /* utile uniquement si vous avez fait de l'allocation dynamique (malloc); la fonction ici doit permettre de libérer la mémoire (free) */ - + free(world->vaisseau); } @@ -167,10 +196,28 @@ void handle_events(SDL_Event *event,world_t *world){ //si une touche est appuyée if(event->type == SDL_KEYDOWN){ //si la touche appuyée est 'D' - if(event->key.keysym.sym == SDLK_d){ - printf("La touche D est appuyée\n"); - } - } + + switch (event->key.keysym.sym) + { + case SDLK_d: + world->vaisseau->x += MOVING_STEP; + break; + case SDLK_q: + world->vaisseau->x -= MOVING_STEP; + break; + case SDLK_z: + world->vaisseau->y -= MOVING_STEP; + break; + case SDLK_s: + world->vaisseau->y += MOVING_STEP; + break; + default: + break; + } + print_sprite(world->vaisseau); + + } + } } @@ -182,6 +229,7 @@ void handle_events(SDL_Event *event,world_t *world){ void clean_textures(textures_t *textures){ clean_texture(textures->background); + clean_texture(textures->ship); /* A COMPLETER */ } @@ -195,6 +243,7 @@ void clean_textures(textures_t *textures){ void init_textures(SDL_Renderer *renderer, textures_t *textures){ textures->background = load_image( "ressources/space-background.bmp",renderer); + textures->ship = load_image( "ressources/spaceship.bmp",renderer); /* A COMPLETER */ @@ -214,7 +263,16 @@ void apply_background(SDL_Renderer *renderer, SDL_Texture *texture){ } } - +void apply_sprite(SDL_Renderer * renderer, SDL_Texture *texture, sprite_t *sprite){ + if(texture != NULL){ + SDL_Rect rect; + rect.x = sprite->x; + rect.y = sprite->y; + rect.w = sprite->w; + rect.h = sprite->h; + SDL_RenderCopy(renderer, texture, NULL, &rect); + } +} @@ -233,6 +291,7 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,textures_t *texture //application des textures dans le renderer apply_background(renderer, textures->background); /* A COMPLETER */ + apply_sprite(renderer, textures->ship, world->vaisseau); // on met à jour l'écran update_screen(renderer); diff --git a/main.o b/main.o index a6bca19f72af0d3ab05df821d1d07020ecfe99dc..e46cdc55c4bcdfb9046d0d07e45867ff97f2fcc4 100644 Binary files a/main.o and b/main.o differ diff --git a/spacecorridor.exe b/spacecorridor.exe index 52db8182627078bb3ddd314a108645e983018942..04f5f7e3ab41f0d500daf638f4947e2da142478a 100644 Binary files a/spacecorridor.exe and b/spacecorridor.exe differ