diff --git a/library/Display/Display.h b/library/Display/Display.h index b47d3d8180bbbf1f34a06f17aec4f1882ab60c35..1df578a9fc254e63f6224ec0d6e8bb90f6c122b5 100644 --- a/library/Display/Display.h +++ b/library/Display/Display.h @@ -1,6 +1,8 @@ #include "../../sdl2-light.h" #include "../World/world.h" #include "../../constante.c" +#include <stdio.h> +#include <stdlib.h> #ifndef DISPLAY_H #define DISPLAY_H diff --git a/library/World/world.c b/library/World/world.c index 041ecc434271583ac25ca335de3f0c6c552de8ed..0eb8190d485b6016c5939a41c7b27efb8e24418a 100644 --- a/library/World/world.c +++ b/library/World/world.c @@ -8,6 +8,14 @@ void update_data(world_t *world){ world->ligneArriver->y += INITIAL_SPEED - world->speed_h; world->mur->y += INITIAL_SPEED - world->speed_h; + + if (isOverScreen(world->vaisseau)){ + if (world->vaisseau->x < 0) world->vaisseau->x = 0; + if (world->vaisseau->x + world->vaisseau->w > SCREEN_WIDTH) world->vaisseau->x = SCREEN_WIDTH - world->vaisseau->w; + if (world->vaisseau->y < 0) world->vaisseau->y = 0; + if (world->vaisseau->y + world->vaisseau->h > SCREEN_HEIGHT) world->vaisseau->y = SCREEN_HEIGHT - world->vaisseau->h; + + } } /** @@ -20,6 +28,13 @@ int is_game_over(world_t *world){ return world->gameover; } +int isOverScreen(sprite_t *sprite){ + if(sprite->x < 0 || sprite->x + sprite->w > SCREEN_WIDTH || sprite->y < 0 || sprite->y + sprite->h > SCREEN_HEIGHT){ + return 1; + } + return 0; +} + void print_sprite(sprite_t *sprite){ printf("x = %d, y = %d, w = %d, h = %d\n", sprite->x, sprite->y, sprite->w, sprite->h); } diff --git a/library/World/world.h b/library/World/world.h index 64e7afee74475f1f91651bd203bde7ebfb0b318b..d0a56df8e147d54c1c919b3cf6edac0bc54e6d2b 100644 --- a/library/World/world.h +++ b/library/World/world.h @@ -1,4 +1,5 @@ - +#include <stdio.h> +#include <stdlib.h> /** * \brief Fichier qui contient les données du monde du jeu * @@ -41,6 +42,13 @@ struct world_s{ typedef struct world_s world_t; void update_data(world_t *world); +/** + * \brief La fonction indique si le jeu est fini en fonction des données du monde + * + * \param sprite + * \return int 0 si le sprite est dans l'écran, 1 sinon + */ +int isOverScreen(sprite_t *sprite); int is_game_over(world_t *world); @@ -50,6 +58,6 @@ sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h); void init_data(world_t * world); -void free_data(world_t * world); +void clean_data(world_t * world); #endif diff --git a/library/World/world.o b/library/World/world.o index 69556e66efb4aa19c8232a04632ed7f93c23de64..83b5a8f9f3dda6146032d660746085c342740bda 100644 Binary files a/library/World/world.o and b/library/World/world.o differ diff --git a/main.c b/main.c index da291ac105268e6d9e3076916fe51bb7c451d211..8f34c6f2137c047665fa804b7c66a47116068dcd 100644 --- a/main.c +++ b/main.c @@ -8,6 +8,7 @@ #include "sdl2-light.h" #include <stdio.h> +#include <stdlib.h> #include "library/Display/Display.h" #include "library/World/world.h" @@ -41,6 +42,7 @@ void handle_events(SDL_Event *event,world_t *world){ switch (event->key.keysym.sym) { case SDLK_d: + world->vaisseau->x += MOVING_STEP; break; case SDLK_q: diff --git a/spacecorridor.exe b/spacecorridor.exe index 9c007bfc6c0c05ab510c84aba673698a64238917..889155a525eb4d1a49d1fdc02dd231019641bc07 100644 Binary files a/spacecorridor.exe and b/spacecorridor.exe differ