diff --git a/code/enemy.c b/code/enemy.c index e777187299e066e8dd9a10e340c56a1ab7c5c05a..e2a778c3ad8ab20faf3fb8b424b46bd778db04b6 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -22,7 +22,17 @@ void init_enemy(enemy_t *enemy) }else{ init_enemyType4(enemy); } - enemy->is_moving = 0; + int p = rand()%10+0; + if (p==1) + { + init_powerUP(&enemy->powerUP,&enemy->sprite); + enemy->power = 1; + }else{ + enemy->power = 0; + } + enemy->is_moving = 0; + enemy->drop = 0; + } void init_enemyType1(enemy_t *enemy) @@ -91,13 +101,15 @@ void init_enemyType4(enemy_t *enemy) void enemy_walk(enemy_t *enemy,soldier_t *soldier) { - if (sprites_collide(&enemy->sprite, &soldier->sprite) == 0 && enemy->is_moving == 1) + if (sprites_collide(&enemy->sprite, &soldier->sprite) == 0 && enemy->is_moving == 1 && enemy->sprite.is_visible == 1) { if(soldier->sprite.x > enemy->sprite.x){ - enemy->sprite.x += enemy->sprite.v; + enemy->sprite.x += enemy->sprite.v; }else{ enemy->sprite.x -= enemy->sprite.v; } + enemy->powerUP.sprite.x = enemy->sprite.x; + enemy->powerUP.DestPowerUP.x = enemy->powerUP.sprite.x; } } @@ -107,6 +119,12 @@ void enemy_dead(enemy_t *enemy,soldier_t *soldier) for(int i = 0; i < NB_BULLET; i++){ handle_sprites_collision(&enemy->sprite,&soldier->charger[i].sprite); } + if (enemy->sprite.is_visible == 0 && enemy->drop == 0 && enemy->power == 1) + { + set_visible(&enemy->powerUP.sprite); + enemy->drop=1; + print_sprite(&enemy->powerUP.sprite); + } } void enemy_touch_soldier(enemy_t *enemy,soldier_t *soldier) diff --git a/code/enemy.h b/code/enemy.h index f10b09e89b5361d6a263e7259540928ea7cdca60..511ebe7fae844002b7235620927e1ce36735c88a 100644 --- a/code/enemy.h +++ b/code/enemy.h @@ -2,7 +2,7 @@ #define __ENEMIE_H__ #include "constant.h" -#include "soldier.h" +#include "powerUp.h" #include <SDL2/SDL.h> @@ -15,6 +15,9 @@ struct enemy_s{ SDL_Rect DestEnemy; int type; int is_moving; + int power; + int drop; + powerUP_t powerUP; }; /** * \brief Type qui correspond au paramètre du soldat diff --git a/code/powerUp.c b/code/powerUp.c index 6d41ae22b62626d7af2ef0fb1b8ac46ebb96e84c..6278ea401eebc5154543a1f10589608665bb4d1c 100644 --- a/code/powerUp.c +++ b/code/powerUp.c @@ -30,6 +30,13 @@ void init_powerUP(powerUP_t *powerUP,sprite_t *sprite){ powerUP->DestPowerUP.h = POWERUP_SIZE; set_invisible(&powerUP->sprite); powerUP->apply_effect = 0; + int random = rand()%2+0; + if (random == 1) + { + powerUP->type = 0; + }else{ + powerUP->type = 1; + } } void plane_fly(supplying_t *supplying) @@ -69,9 +76,16 @@ void soldier_touch_powerUP(powerUP_t *powerUP,soldier_t *soldier) handle_sprites_collision_damage_1sprite(&soldier->sprite,&powerUP->sprite); } -void apply_effect(powerUP_t *powerUP,soldier_t *soldier,sprite_t *sprite){ - if(powerUP->sprite.is_visible == 0 && powerUP->apply_effect == 0 && sprite->is_visible == 0){ - soldier->sprite.v = soldier->sprite.v + 10; +void apply_effect(powerUP_t *powerUP,soldier_t *soldier,int drop){ + if(powerUP->sprite.is_visible == 0 && powerUP->apply_effect == 0 && drop == 1){ + print_sprite(&soldier->sprite); + if (powerUP->type == 0) + { + soldier->sprite.v = soldier->sprite.v + 10; + }else{ + soldier->sprite.hp = soldier->sprite.hp + 10; + print_sprite(&soldier->sprite); + } powerUP->apply_effect = 1; } } \ No newline at end of file diff --git a/code/powerUp.h b/code/powerUp.h index 8e50b9a408e56d488a31a630ae3bdee765adfb45..16089d3e6b9de582c82079fe0ae968d9c2ec665f 100644 --- a/code/powerUp.h +++ b/code/powerUp.h @@ -12,6 +12,7 @@ struct powerUP_s{ sprite_t sprite; SDL_Rect DestPowerUP; + int type; int apply_effect; }; /** @@ -47,6 +48,6 @@ void plane_dead(supplying_t *supplying,soldier_t *soldier); void soldier_touch_powerUP(powerUP_t *powerUP,soldier_t *soldier); -void apply_effect(powerUP_t *powerUP,soldier_t *soldier,sprite_t *sprite); +void apply_effect(powerUP_t *powerUP,soldier_t *soldier,int drop); #endif \ No newline at end of file diff --git a/code/sprite.c b/code/sprite.c index 10498e5c0c9cedadc685357f064c6e5196360413..c1399334b52d6aedb042a24f72ec9250277b0de2 100644 --- a/code/sprite.c +++ b/code/sprite.c @@ -20,6 +20,18 @@ void init_sprite(sprite_t *sprite, int x, int y, int w, int h, float v,int hp) } + +void print_sprite(sprite_t*sprite) +{ + printf("Coordonnées x: %f \n",sprite->x); + printf("Coordonnées y: %f \n",sprite->y); + printf("Hauteur: %f \n",sprite->h); + printf("Largeur: %f \n",sprite->w); + printf("Vitesse: %f \n",sprite->v); + printf("Visible: %d \n",sprite->is_visible); + printf("HP: %d \n",sprite->hp); +} + // Si sprite sort de l'écran return true = 1 int over_left (sprite_t*sprite) { diff --git a/code/sprite.h b/code/sprite.h index d63b931b54061489e41edc352e77ad2af2a9c99d..09169c75a3e77ac060ef04ed456d60b3cb26c5aa 100644 --- a/code/sprite.h +++ b/code/sprite.h @@ -34,6 +34,8 @@ int over_left (sprite_t*sprite); int over_right (sprite_t*sprite); +void print_sprite(sprite_t*sprite); + int sprites_collide(sprite_t *sp2, sprite_t *sp1); void handle_sprites_collision(sprite_t *sp1, sprite_t *sp2); diff --git a/code/world_data.c b/code/world_data.c index acba8a1a0b0e176b12191ec3d047c0ae93362920..4e402e580d49a28397a0776f63a88cb7f4175a46 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -8,16 +8,7 @@ #include "world_data.h" #include "math.h" //Nécessaire pour la collision entre deux sprites -void print_sprite(sprite_t*sprite) -{ - printf("Coordonnées x: %f \n",sprite->x); - printf("Coordonnées y: %f \n",sprite->y); - printf("Hauteur: %f \n",sprite->h); - printf("Largeur: %f \n",sprite->w); - printf("Vitesse: %f \n",sprite->v); - printf("Visible: %d \n",sprite->is_visible); - printf("HP: %d \n",sprite->hp); -} + int* load_save() { @@ -127,7 +118,7 @@ void refresh_data(world_t *world) world->enemy.DestEnemy.y = world->enemy.sprite.y; enemy_dead(&world->enemy,&world->soldier);*/ - + //Si la manche n'est pas finie if(isRoundEnded(&world->rounds) == 0) { @@ -143,6 +134,8 @@ void refresh_data(world_t *world) //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); enemy_dead(&world->rounds.enemies[i],&world->soldier); } + soldier_touch_powerUP(&world->rounds.enemies[i].powerUP,&world->soldier); + apply_effect(&world->rounds.enemies[i].powerUP,&world->soldier,world->rounds.enemies[i].drop); } } //Sinon si la manche est finie, manche suivante @@ -153,6 +146,7 @@ void refresh_data(world_t *world) //Charger le bon nombre de texture } + soldier_touch_powerUP(&world->supplying.powerUP,&world->soldier); shootAfterE(&world->soldier); @@ -160,9 +154,7 @@ void refresh_data(world_t *world) plane_dead(&world->supplying,&world->soldier); - soldier_touch_powerUP(&world->supplying.powerUP,&world->soldier); - - apply_effect(&world->supplying.powerUP,&world->soldier,&world->supplying.plane); + apply_effect(&world->supplying.powerUP,&world->soldier,world->supplying.drop); diff --git a/data/save.txt b/data/save.txt index b6216b901f05fa92548275658185f45fbd8fc970..7cac3b77e97ef9abc02663c83648ec7e7660d45d 100644 --- a/data/save.txt +++ b/data/save.txt @@ -1,7 +1,7 @@ /Vie du joueur au début 10 /Nombre d'ennemis au début -15 +10 /Nombre d'ennemis en plus à chaque manche 5 /Nombre de balles