diff --git a/library/Sprites/sprites.c b/library/Sprites/sprites.c index 52eb7766420c08d245abc4572345003d3dac5343..d67d4f56e46892f7bb6115fd89461616bb2275a9 100644 --- a/library/Sprites/sprites.c +++ b/library/Sprites/sprites.c @@ -1,5 +1,6 @@ #include "sprites.h" #include "../../constante.c" +#include <string.h> 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; @@ -12,12 +13,15 @@ void print_sprite(sprite_t *sprite){ } -sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h, int id){ +sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h, char id){ sprite = malloc(sizeof(sprite_t)); sprite->x = x; sprite->y = y; sprite->w = w; sprite->h = h; + sprite->id = malloc(sizeof(char) * 10); + strcpy(sprite->id, &id); + return sprite; } diff --git a/library/Sprites/sprites.h b/library/Sprites/sprites.h index a19ee01911675d7fd97d6638cb43773edba98824..3436a48d94baba387e6fb17b80b0d4e195947f76 100644 --- a/library/Sprites/sprites.h +++ b/library/Sprites/sprites.h @@ -28,7 +28,7 @@ struct sprite_s{ int y; int w; int h; - int id; + char * id; }; typedef struct sprite_s sprite_t; @@ -58,10 +58,10 @@ void print_sprite(sprite_t *sprite); * \param h * \return sprite_t* */ -sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h, int id); +sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h, char id); /** - * \brief La fonction libère les données du sprite + * \brief La fonction indique si les sprites se touchent * * \param sp1 * \param sp2 diff --git a/library/Sprites/sprites.o b/library/Sprites/sprites.o index 44f78ba2d9121312eebac520db0000a731a95c1b..d8e0fd254cad4fc891329be08d5932ed1edb1160 100644 Binary files a/library/Sprites/sprites.o and b/library/Sprites/sprites.o differ diff --git a/library/World/world.c b/library/World/world.c index 038ce06409490f259ddaec5492ba5959f10eac23..2290b2c429b7fec19a033f1e296f2bc2167c4227 100644 --- a/library/World/world.c +++ b/library/World/world.c @@ -11,17 +11,9 @@ void update_data(world_t *world){ if (world->vaisseau->y + world->vaisseau->h > SCREEN_HEIGHT) world->vaisseau->y = SCREEN_HEIGHT - world->vaisseau->h; } for(int i = 0; i < world->nb_murs; i++){ - if (handle_sprite_collide(world->vaisseau, world->murs[i], world, 0) == 1){ - break; - }else if (handle_sprite_collide(world->vaisseau, world->murs[i], world, 0) == 2){ - printf("CHangement de sens\n"); - break; - } - } - - if (handle_sprite_collide(world->vaisseau, world->ligneArriver, world, 0) == 1){ // si le vaisseau touche la ligne d'arrivée - world->gameover = 1; + collide(world->vaisseau, world->murs[i], world, 0); } + collide(world->vaisseau, world->ligneArriver, world, 1); world->timer = SDL_GetTicks(); } @@ -36,9 +28,9 @@ void init_data(world_t * world){ world->gameover = 0; world->speed_h = (float)INITIAL_SPEED; // Initialisation du vaisseau - world->vaisseau = init_sprite(world->vaisseau, SCREEN_WIDTH/2 - SHIP_SIZE/2, SCREEN_HEIGHT - SHIP_SIZE, SHIP_SIZE, SHIP_SIZE, 0); + world->vaisseau = init_sprite(world->vaisseau, SCREEN_WIDTH/2 - SHIP_SIZE/2, SCREEN_HEIGHT - SHIP_SIZE, SHIP_SIZE, SHIP_SIZE, '0'); init_walls(world); - world->ligneArriver = init_sprite(world->ligneArriver, 0, -world->nb_lines_murs*METEORITE_SIZE-30 , SCREEN_WIDTH, FINISH_LINE_HEIGHT, 0); + world->ligneArriver = init_sprite(world->ligneArriver, 0, -world->nb_lines_murs*METEORITE_SIZE-30 , SCREEN_WIDTH, FINISH_LINE_HEIGHT, 'z'); print_sprite(world->vaisseau); world->startTimer = SDL_GetTicks(); @@ -57,19 +49,19 @@ void clean_data(world_t *world){ printf("clean_data"); } - -int handle_sprite_collide(sprite_t *sp1, sprite_t *sp2, world_t *world, int make_disappear){ +void collide(sprite_t *sp1, sprite_t *sp2, world_t *world, int make_disappear){ if (sprites_collide(sp1, sp2)){ - world->gameover = 1; - printf("collision"); - return 1; - - }else{ - return 0; + printf("%s\n", sp2->id); + if (strcmp(sp2->id, "1") == 0){ + world->gameover = 1; + }else if(strcmp(sp2->id, "2") == 0){ + printf("Changement de sens"); + }else if(strcmp(sp2->id, "z") == 0){ + world->gameover = 1; + } } } - void init_walls(world_t *world){ world->nb_murs = 0; world->murs = malloc(sizeof(sprite_t) * MAX_LENGTH*MAX_LINES); @@ -78,25 +70,13 @@ void init_walls(world_t *world){ for (int i = 0; i < world->nb_lines_murs; i++) { for (int j = 0; j < MAX_LENGTH; j++) { - switch (txt[i][j]) - { - case '1': - world->murs[world->nb_murs] = init_sprite(world->murs[world->nb_murs], j*METEORITE_SIZE, (i*METEORITE_SIZE)-(METEORITE_SIZE*world->nb_lines_murs), METEORITE_SIZE, METEORITE_SIZE, 1); - world->nb_murs++; - break; - case '2': - world->murs[world->nb_murs] = init_sprite(world->murs[world->nb_murs], j*METEORITE_SIZE, (i*METEORITE_SIZE)-(METEORITE_SIZE*world->nb_lines_murs), METEORITE_SIZE, METEORITE_SIZE, 2); + if (txt[i][j] != '0'){ + world->murs[world->nb_murs] = init_sprite(world->murs[world->nb_murs], j*METEORITE_SIZE, (i*METEORITE_SIZE)-(METEORITE_SIZE*world->nb_lines_murs), METEORITE_SIZE, METEORITE_SIZE, txt[i][j]); world->nb_murs++; - break; - - default: - break; } - } } printf("aaaa"); - } void update_walls(world_t *world){ diff --git a/library/World/world.h b/library/World/world.h index d89d094f7549446f9a6b9672791f2cf6ed8d60e2..b89e47b05490485938daf30b111d6b8210895954 100644 --- a/library/World/world.h +++ b/library/World/world.h @@ -59,7 +59,7 @@ void update_data(world_t *world); int is_game_over(world_t *world); -/** + /** * \brief La fonction initialise les données du monde du jeu @@ -74,17 +74,18 @@ void init_data(world_t * world); * \param world les données du monde */ void clean_data(world_t * world); + + /** - * \brief La fonction indique si le sprite est en collision avec un autre sprite + * \brief La fonction fais une action en fonction de la collision entre deux sprites * - * \param sp1 - * \param sp2 - * \param world - * \param make_disappear - * - * \return int 0 si les sprites ne se touchent pas, 1 sinon + * \param sp1 Généralement le vaisseau + * \param sp2 Généralement la météorite + * \param world Le monde + * \param make_disappear Indique si l'on doit faire disparaître les sprites en cas de collision */ -int handle_sprite_collide(sprite_t *sp1, sprite_t *sp2, world_t *world, int make_disappear); +void collide(sprite_t *sp1, sprite_t *sp2, world_t *world, int make_disappear); + /** * \brief La fonction initialise les murs du jeu diff --git a/library/World/world.o b/library/World/world.o index 6a14e8f9ee177293bb490d21cc72124caa42a914..eb906c738d5f8cbfd81ee47b2e5ac4796d8bdfde 100644 Binary files a/library/World/world.o and b/library/World/world.o differ diff --git a/maps/default.txt b/maps/default.txt index 06238f54a0ae40e1e07640a210f3e5aad76af6c1..cb0c728479c7f0fa82a9d044d8927cdd5ce19af3 100644 --- a/maps/default.txt +++ b/maps/default.txt @@ -7,8 +7,7 @@ 001001111100011100000110 001001111100011100000110 001001111100011100000110 - -001001111100011100000110 +000000000000000000000000 001001111100011100000110 001001111100011100000110 001001111100011100000110 @@ -45,5 +44,4 @@ 001001111100011100000110 001001111100011100000110 001201111100011100000110 -001001111100011100000110 - +001001111100011100000110 \ No newline at end of file diff --git a/spacecorridor.exe b/spacecorridor.exe index 08f9dc9790ee6f1b974f730e6dc8abb9ac3cafb7..fc931b72b38ef4bcbe43ccb371aaa6012e954b96 100644 Binary files a/spacecorridor.exe and b/spacecorridor.exe differ