diff --git a/code/constant.h b/code/constant.h
index bdd60f5c6cbbb9b848fdb8e7b8af3c2b682fd3cf..d539ef6e1eeaa9e456b8ba69270eac5fc18e6f5e 100644
--- a/code/constant.h
+++ b/code/constant.h
@@ -30,15 +30,40 @@
 #define SOLDIER_WIDTH 78 
 
 /**
- * \brief Taille du soldat
+ * \brief Hauteur de l'ennemie
  */
-#define ENEMY_SIZE 100
+#define ENEMY_HEIGHT 88 
 
+/**
+ * \brief Largeur de l'ennemie
+ */
+#define ENEMY_WIDTH 78 
+
+/**
+ * \brief Hauteur de l'ennemie du type 4
+ */
+#define ENEMY_T4_HEIGHT 68 
+
+/**
+ * \brief Largeur de l'ennemie du type 4
+ */
+#define ENEMY_T4_WIDTH 58 
+
+/**
+ * \brief Taille de l'avion de ravitaillement
+ */
 #define PLANE_SIZE 50
 
+/**
+ * \brief Taille de l'avion de ravitaillement
+ */
 #define POWERUP_SIZE 50
 
+/**
+ * \brief Vitesse de chute du power up
+ */
 #define POWERUP_SPEED 0.5
+
 /**
  * \brief Hauteur de la balle
 */
@@ -54,6 +79,19 @@
 */
 #define ENEMY_SPEED 1
 
+/**
+ * \brief Vitesse d'un ennemi de type 3
+*/
+#define ENEMY_T3_SPEED 3
+
+/**
+ * \brief Vitesse d'un ennemi de type 2
+*/
+#define ENEMY_T2_SPEED 0.5
+
+/**
+ * \brief Vitesse de l'avion de ravitaillement
+ */
 #define PLANE_SPEED 1
 
 /**
@@ -61,6 +99,9 @@
 */
 #define SOLDIER_SPEED 2
 
+/**
+ * \brief Vitesse du accroupie
+*/
 #define SOLDIER_SPEED_CTRL 0.5f
 
 /**
diff --git a/code/enemy.c b/code/enemy.c
index 613c07ed5436483bc21d7dcdddb56c9ca96dd5db..4d67d6e07de851c841a8216d558358893d5b2072 100644
--- a/code/enemy.c
+++ b/code/enemy.c
@@ -11,15 +11,18 @@
 void init_enemy(enemy_t *enemy)
 {
     srand(time(NULL));
-    int random = rand()%3+0;
+    int random = rand()%4+0;
     if (random == 1)
     {
       init_enemyType1(enemy);
     }else if (random == 2){
       init_enemyType2(enemy);
-    }else{
+    }else if (random == 3){
       init_enemyType3(enemy);
-    }   
+    }else{
+      init_enemyType4(enemy);
+    }
+    enemy->is_moving = 0;  
 }
 
 void init_enemyType1(enemy_t *enemy)
@@ -28,15 +31,15 @@ void init_enemyType1(enemy_t *enemy)
     int random = rand()%2+0;
     if (random == 1)
     {
-      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, ENEMY_SPEED, 1);
+      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1);
     }else{
-      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, ENEMY_SPEED, 1);
+      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1);
     }   
     enemy->type = 1;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
-    enemy->DestEnemy.w = ENEMY_SIZE;
-    enemy->DestEnemy.h = ENEMY_SIZE;
+    enemy->DestEnemy.w = ENEMY_WIDTH;
+    enemy->DestEnemy.h = ENEMY_HEIGHT;
 }
 
 void init_enemyType2(enemy_t *enemy)
@@ -45,15 +48,15 @@ void init_enemyType2(enemy_t *enemy)
     int random = rand()%2+0;
     if (random == 1)
     {
-      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, 1, 10);
+      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 10);
     }else{
-      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE,1, 10);
+      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 10);
     }   
     enemy->type = 2;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
-    enemy->DestEnemy.w = ENEMY_SIZE;
-    enemy->DestEnemy.h = ENEMY_SIZE;
+    enemy->DestEnemy.w = ENEMY_WIDTH;
+    enemy->DestEnemy.h = ENEMY_HEIGHT;
 }
 
 void init_enemyType3(enemy_t *enemy)
@@ -62,20 +65,37 @@ void init_enemyType3(enemy_t *enemy)
     int random = rand()%2+0;
     if (random == 1)
     {
-      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE, 5, 1);
+      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T3_SPEED, 1);
     }else{
-      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_SIZE*2, ENEMY_SIZE, ENEMY_SIZE,5, 1);
+      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T3_SPEED, 1);
     }   
     enemy->type = 3;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
-    enemy->DestEnemy.w = ENEMY_SIZE;
-    enemy->DestEnemy.h = ENEMY_SIZE;
+    enemy->DestEnemy.w = ENEMY_WIDTH;
+    enemy->DestEnemy.h = ENEMY_HEIGHT;
+}
+
+void init_enemyType4(enemy_t *enemy)
+{
+    srand(time(NULL));
+    int random = rand()%2+0;
+    if (random == 1)
+    {
+      init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT, 1, 1);
+    }else{
+      init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT,1, 1);
+    }   
+    enemy->type = 4;
+    enemy->DestEnemy.x = enemy->sprite.x;
+    enemy->DestEnemy.y = enemy->sprite.y;
+    enemy->DestEnemy.w = ENEMY_T4_WIDTH;
+    enemy->DestEnemy.h = ENEMY_T4_HEIGHT;
 }
 
 void enemy_walk(enemy_t *enemy,soldier_t *soldier)
 {
-  if (sprites_collide(&enemy->sprite, &soldier->sprite) != 1)
+  if (sprites_collide(&enemy->sprite, &soldier->sprite) != 1 && enemy->is_moving!=0)
   {
     if(soldier->sprite.x > enemy->sprite.x){
     enemy->sprite.x += enemy->sprite.v;
diff --git a/code/enemy.h b/code/enemy.h
index 3ceb6562c7266b29fa935d65ba7fe99be60b20f0..f10b09e89b5361d6a263e7259540928ea7cdca60 100644
--- a/code/enemy.h
+++ b/code/enemy.h
@@ -14,6 +14,7 @@ struct enemy_s{
     int hp;     /*!<Point de vie */
     SDL_Rect DestEnemy;
     int type;
+    int is_moving;
 };
 /**
  * \brief Type qui correspond au paramètre du soldat
@@ -35,4 +36,6 @@ void init_enemyType2(enemy_t *enemy);
 
 void init_enemyType3(enemy_t *enemy);
 
+void init_enemyType4(enemy_t *enemy);
+
 #endif
\ No newline at end of file
diff --git a/code/sprite.h b/code/sprite.h
index a0f7446624167f6b6c5dfe260a19f66a93fd4739..d63b931b54061489e41edc352e77ad2af2a9c99d 100644
--- a/code/sprite.h
+++ b/code/sprite.h
@@ -16,8 +16,8 @@ struct sprite_s{
     float h;    /*!<Hauteur du sprite */
     float w;    /*!<Largeur du sprite */
     float v;    /*!<Vitesse vertical */
-    int is_visible; /*!<Visible ou non, 0 si visible et 1 si non visible */
-    int hp;
+    int is_visible; /*!<Visible ou non, 0 si invisible et 1 si visible */
+    int hp;	/*!<Point de vie */
 };
 /**
  * \brief Type qui correspond au paramètre du sprite
diff --git a/code/world_data.c b/code/world_data.c
index 8a45b9d43da22223ce44104c1c73f1e176adf8b4..14f6d72e438ff02d270ff5e2096d5aa1ffe8e4d2 100644
--- a/code/world_data.c
+++ b/code/world_data.c
@@ -135,7 +135,7 @@ void refresh_data(world_t *world)
 
 
 
-    //enemy_touch_soldier(&world->enemy,&world->soldier);
+    enemy_touch_soldier(&world->enemy,&world->soldier);
 
     plane_dead(&world->supplying,&world->soldier);