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