diff --git a/code/display.c b/code/display.c
index 09a8ac589c14244a88e352e863b3ab865ea17d6c..d07e08897428e93a158c469dfd6bd770c79851a0 100644
--- a/code/display.c
+++ b/code/display.c
@@ -101,21 +101,6 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour
     {
         if (world->rounds.enemies[i].sprite.is_visible == 1)
         {
-            
-            /*if(world->rounds.enemies[i].direction == 1 && world->rounds.enemies[i].isLookingLeft == 1 && world->rounds.enemies[i].isLookingRight == 0)
-            {
-                rotate_left(renderer, world, resources->enemies[i],i);
-
-                world->rounds.enemies[i].isLookingLeft = 0;
-                world->rounds.enemies[i].isLookingRight = 1;
-            }
-            else if (world->rounds.enemies[i].direction == -1 && world->rounds.enemies[i].isLookingRight == 1 && world->rounds.enemies[i].isLookingLeft == 0)
-            {
-                //rotate_right(renderer, world, resources->enemies[i],i);
-                rotate_left(renderer, world, resources->enemies[i],i);
-                world->rounds.enemies[i].isLookingLeft = 1;
-                world->rounds.enemies[i].isLookingRight = 0;
-            }*/
             load_texture_enemies(resources, renderer, world, i);
         }
     }
diff --git a/code/enemy.c b/code/enemy.c
index 8fc7f0ea37bfcf1f5705233fad9e539d94d67a44..9e1e08dfa874da7011e1ec0b126d29d5031ec3a3 100644
--- a/code/enemy.c
+++ b/code/enemy.c
@@ -32,8 +32,6 @@ void init_enemy(enemy_t *enemy)
     }
     enemy->is_moving = 0;
     enemy->drop = 0;
-    enemy->isLookingRight = 1;
-    enemy->isLookingLeft = 0;
      
 }
 
@@ -44,15 +42,12 @@ void init_enemyType1(enemy_t *enemy)
     {
       init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T1_HEIGHT*2-20, ENEMY_T1_WIDTH, ENEMY_T1_HEIGHT, ENEMY_SPEED, 1);
       enemy->direction = -1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }else{
       init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T1_HEIGHT*2-20, ENEMY_T1_WIDTH, ENEMY_T1_HEIGHT, ENEMY_SPEED, 1);
       enemy->direction = 1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }   
     enemy->type = 1;
+    enemy->score = 1;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
     enemy->DestEnemy.w = ENEMY_T1_WIDTH;
@@ -66,16 +61,12 @@ void init_enemyType2(enemy_t *enemy)
     {
       init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 2);
       enemy->direction = -1;
-      
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }else{
       init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 2);
       enemy->direction = 1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }   
     enemy->type = 2;
+    enemy->score = 2;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
     enemy->DestEnemy.w = ENEMY_WIDTH;
@@ -89,15 +80,12 @@ void init_enemyType3(enemy_t *enemy)
     {
       init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T3_SPEED, 1);
       enemy->direction = -1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }else{
       init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T3_SPEED, 1);
       enemy->direction = 1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }   
     enemy->type = 3;
+    enemy->score = 3;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
     enemy->DestEnemy.w = ENEMY_WIDTH;
@@ -111,15 +99,12 @@ void init_enemyType4(enemy_t *enemy)
     {
       init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT, 1, 1);
       enemy->direction = -1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }else{
       init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT,1, 1);
       enemy->direction = 1;
-      /*enemy->isLookingRight = 1;
-      enemy->isLookingLeft = 0;*/
     }   
     enemy->type = 4;
+    enemy->score = 1;
     enemy->DestEnemy.x = enemy->sprite.x;
     enemy->DestEnemy.y = enemy->sprite.y;
     enemy->DestEnemy.w = ENEMY_T4_WIDTH;
@@ -143,11 +128,21 @@ void enemy_walk(enemy_t *enemy,soldier_t *soldier)
   
 }
 
-void enemy_dead(enemy_t *enemy,soldier_t *soldier)
+void enemy_dead(enemy_t *enemy,soldier_t *soldier, int *score)
 {
-  for(int i = 0; i < NB_BULLET; i++){
-    handle_sprites_collision(&enemy->sprite,&soldier->charger[i].sprite);
+  if(enemy->sprite.is_visible == 1)
+  {
+    for(int i = 0; i < NB_BULLET; i++)
+    {
+      handle_sprites_collision(&enemy->sprite,&soldier->charger[i].sprite);
+    }
+
+    if(enemy->sprite.is_visible == 0)
+    {
+      *score += enemy->score;
+    }
   }
+
   if (enemy->sprite.is_visible == 0 && enemy->drop == 0 && enemy->power == 1)
   {
     set_visible(&enemy->powerUP.sprite);
@@ -158,7 +153,12 @@ void enemy_dead(enemy_t *enemy,soldier_t *soldier)
 
 void enemy_touch_soldier(enemy_t *enemy,soldier_t *soldier)
 {
-  handle_sprites_collision_damage_1sprite(&enemy->sprite,&soldier->sprite);
+  //handle_sprites_collision_damage_1sprite(&enemy->sprite,&soldier->sprite);
+  if(enemy->sprite.is_visible == 1)
+  {
+    handle_sprites_collision(&enemy->sprite, &soldier->sprite);    
+  }
+  
 }
 
 
diff --git a/code/enemy.h b/code/enemy.h
index 256c6cdfddcc55f2d20f7dfc70329ddfee14d3d4..d2a34b383a547d8155552eb6f811e4fdb6dab4e2 100644
--- a/code/enemy.h
+++ b/code/enemy.h
@@ -19,8 +19,7 @@ struct enemy_s{
     int drop;
     powerUP_t powerUP;
     int direction;
-    int isLookingRight;
-    int isLookingLeft;
+    int score;
 };
 /**
  * \brief Type qui correspond au paramètre du soldat
@@ -32,7 +31,7 @@ void init_enemy(enemy_t *enemy);
 
 void enemy_walk(enemy_t *enemy,soldier_t *soldier);
 
-void enemy_dead(enemy_t *enemy,soldier_t *soldier);
+void enemy_dead(enemy_t *enemy,soldier_t *soldier, int *score);
 
 void enemy_touch_soldier(enemy_t *enemy,soldier_t *soldier);
 
diff --git a/code/file_management.c b/code/file_management.c
index fe978e3be936e1ddc1a7c717cca471fc94803e96..995cdfb4ba568a663a5422f690b1336423ad381b 100644
--- a/code/file_management.c
+++ b/code/file_management.c
@@ -5,7 +5,7 @@
 int* getDataSave(const char *name)
 {
     int value = 0;
-    int nb_lines = 8;
+    int nb_lines = 10;
     FILE *file = fopen(name,"r");
     
     if(file == NULL)
@@ -14,8 +14,8 @@ int* getDataSave(const char *name)
     }  
     
     //Deplacement : nombre de caractere du commentaire +2 (Sauf premier +1)
-    int deplacement[4] = {24,28,43,19};
-    int *data = malloc(sizeof(int)*4);
+    int deplacement[5] = {24,28,43,22,17};
+    int *data = malloc(sizeof(int)*5);
     //int data[4];
     for(int i = 0; i < nb_lines/2; i++)
     {
@@ -33,14 +33,14 @@ int* getDataSave(const char *name)
 void setDataSave(const char *name, int* data)
 {
     FILE *file = fopen(name,"w+");
-    int nb_lines = 8;
+    int nb_lines = 10;
 
     if(file == NULL)
     {
         perror("Impossible d'ouvrir le fichier");
     }  
 
-    char sentences[4][50] = {"/Vie du joueur au début\n","/Nombre d'ennemis au début\n","/Nombre d'ennemis en plus à chaque manche\n","/Nombre de balles\n"};
+    char sentences[5][50] = {"/Vie du joueur au début\n","/Nombre d'ennemis au début\n","/Nombre d'ennemis en plus à chaque manche\n","/Numéro de la manche\n","/Meilleur score\n"};
     for(int i = 0; i < nb_lines/2; i++)
     {
         fprintf(file,"%s", sentences[i]);
diff --git a/code/round_management.c b/code/round_management.c
index 640a813c4e780abe1a353a1cffa73c664c31bac6..cc38f8eb12e1fc3636a7b153eda7c44907a3e733 100644
--- a/code/round_management.c
+++ b/code/round_management.c
@@ -15,9 +15,9 @@ int isRoundEnded(round_t *round)
 }
 
 
-void initFirstRound(round_t *round, int nbEnemies, int incrementation)
+void initFirstRound(round_t *round, int nbEnemies, int incrementation, int roundNumber)
 {
-	round->round_number = 1;
+	round->round_number = roundNumber;
 	round->number_enemies = nbEnemies;
 	round->incrementation = incrementation;
 	round->counter = 0;
@@ -29,7 +29,7 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation)
 	{
 		init_enemy(&round->enemies[i]);
 	}
-	printf("Ennemis : %d Incrementation : %d\n",round->number_enemies,round->incrementation);
+	printf("Manche : %d Ennemis : %d Incrementation : %d\n",round->round_number, round->number_enemies,round->incrementation);
 }
 
 //Actualiser qui se déplace
diff --git a/code/round_management.h b/code/round_management.h
index 440c1cf5b1c48d91f8f03c26b2222330e405018b..9a61f40c4989290773917ebe4ad03f4626e46ff2 100644
--- a/code/round_management.h
+++ b/code/round_management.h
@@ -20,7 +20,7 @@ typedef struct round_s round_t;
 
 int isRoundEnded(round_t *round);
 
-void initFirstRound(round_t *round, int nbEnemies, int incrementation);
+void initFirstRound(round_t *round, int nbEnemies, int incrementation, int roundNumber);
 
 void updateRound(round_t *round);
 
diff --git a/code/world_data.c b/code/world_data.c
index d19032a00bb3c42698268598c4ef423cafe7f204..2fd8667d70a58def08b66aac26e4bc8155835124 100644
--- a/code/world_data.c
+++ b/code/world_data.c
@@ -16,11 +16,13 @@ int* load_save()
   int* dataSave;
   dataSave = getDataSave("../data/save.txt");
 
-  int *dataToAdd = malloc(sizeof(int)*3);
+  int *dataToAdd = malloc(sizeof(int)*5);
   //Initialiser les valeurs par défaut
   dataToAdd[0] = SOLDIER_HP;
   dataToAdd[1] = NUMBER_ENEMIES_START;
   dataToAdd[2] = INCREMENTATION_ENEMIES;
+  dataToAdd[3] = 1;
+  dataToAdd[4] = dataSave[4];
 
   //PV du joueur
   if(dataSave[0] > 0 && dataSave[0] < 31)
@@ -29,7 +31,7 @@ int* load_save()
   }
 
   //Nombre d'ennemis
-  if(dataSave[1] > 0 /*&& dataSave[1] < 210*/)
+  if(dataSave[1] > 0)
   {
     dataToAdd[1] = dataSave[1];
   }
@@ -39,17 +41,27 @@ int* load_save()
   {
     dataToAdd[2] = dataSave[2];
   }
+
+  //Numéro de la manche
+  if(dataSave[3] > 0)
+  {
+    dataToAdd[3] = dataSave[3];
+  }
   free(dataSave);
   return dataToAdd;
 }
 
 void save_game(world_t *world)
 {
-  int dataSave[4];
+  int dataSave[5];
   dataSave[0] = world->soldier.sprite.hp;
   dataSave[1] = world->rounds.number_enemies;
   dataSave[2] = world->rounds.incrementation;
-  dataSave[3] = 30;
+  dataSave[3] = world->rounds.round_number;
+  if(world->score > world->highScore)
+    dataSave[4] = world->score;
+  else
+    dataSave[4] = world->highScore;
   setDataSave("../data/save.txt",dataSave);
 }
 
@@ -59,8 +71,9 @@ void init_data(world_t *world)
   //Chargement de la sauvegarde
   int* data = load_save();
 
+  world->highScore = data[4];
   //Chargement de la première manche
-  initFirstRound(&world->rounds,data[1],data[2]);
+  initFirstRound(&world->rounds,data[1],data[2],data[3]);
 
   //Initialisation du soldat
   init_soldier(&world->soldier,data[0]);
@@ -78,6 +91,7 @@ void init_data(world_t *world)
   //init_bullet(world);
 
   //On n'est pas à la fin du jeu
+  world->score = 0;
   world->gameover = 0;
   //Score à 0
   //world->score = 0; 
@@ -104,8 +118,9 @@ void refresh_data(world_t *world)
         world->rounds.enemies[i].DestEnemy.x = world->rounds.enemies[i].sprite.x;
         world->rounds.enemies[i].DestEnemy.y = world->rounds.enemies[i].sprite.y;
         //Si l'ennemi touche le soldat
-        //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier);
-        enemy_dead(&world->rounds.enemies[i],&world->soldier);
+        //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier,&world->score);
+        enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier);
+        enemy_dead(&world->rounds.enemies[i],&world->soldier,&world->score);
       }
     }
   }
diff --git a/code/world_data.h b/code/world_data.h
index 5ce7b9d530f2b9c2d78d69571f0ec8f1b9231a03..1369c46309658a61443ad04e986a33de62cd57c8 100644
--- a/code/world_data.h
+++ b/code/world_data.h
@@ -19,7 +19,7 @@ struct world_s{
     round_t rounds;
     int gameover; /*!< Entier pour la fin du jeu */
     int score;  /*!< Score du joueur */
-    //int gameFinished;
+    int highScore;
 };
 
 /**
diff --git a/data/save.txt b/data/save.txt
index 3963c9b20af603e810238702381b66e0117a7959..d86b63166f37b9c9f2a302d763f99fe144559f76 100644
--- a/data/save.txt
+++ b/data/save.txt
@@ -1,8 +1,10 @@
 /Vie du joueur au début
-10
+1
 /Nombre d'ennemis au début
-8
+18
 /Nombre d'ennemis en plus à chaque manche
 1
-/Nombre de balles
+/Numéro de la manche
 30
+/Meilleur score
+78