diff --git a/clavier.c b/clavier.c
deleted file mode 100644
index 3a4a1d88d94ef8f62cc71ba5f94bea8a9d1a198d..0000000000000000000000000000000000000000
--- a/clavier.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* #include <SDL2/SDL.h>
-#include "clavier.h"
-#include <stdio.h>
-
-
-
-
-
-
-
-void animer_persos(ListeP L){
-  s_ListeP *tmp = L;
-  tmp = tmp->next;
-  animer_perso(&tmp->data);
-  return;
-}
-
-
-*/
diff --git a/clavier.h b/clavier.h
deleted file mode 100644
index aa078d7a90c85456fad52f474e7f5c203475c1fe..0000000000000000000000000000000000000000
--- a/clavier.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/*#include <SDL2/SDL.h>
-#include "listeB.h"
-
-
-
-
-
-void animer_persos(ListeP L);*/
-
diff --git a/effets.c b/effets.c
index 54362866045e4fc61385ce04f529f67e5439754c..a4dab957633e491d41006738ecf35522f4869235 100644
--- a/effets.c
+++ b/effets.c
@@ -7,9 +7,9 @@ Effet nouvel_effet_bloodHit(SDL_Texture **sprites, SDL_Rect pos, int angle){
   e.srcrect.y = 0;
   e.srcrect.w = 128;
   e.srcrect.h = 128;
-  e.image = sprites[2];
+  e.image = sprites[3];
   e.angle = angle - 90;
-  e.xMax = 1920;
+  e.yMax = 1920;
   return e;
 }
 
diff --git a/effets.h b/effets.h
index 33276385562072a23c3be98825dbb27db7524294..c03e5246a6a5a78597cef151bec01fff9609142e 100644
--- a/effets.h
+++ b/effets.h
@@ -8,7 +8,7 @@ struct s_Effet
     SDL_Rect srcrect;
     SDL_Texture *image;
     float angle;
-    int xMax;
+    int yMax;
 };
 
 Effet nouvel_effet_bloodHit(SDL_Texture **sprites, SDL_Rect pos, int angle);
diff --git a/listeB.c b/listeB.c
index 5efee12f196de40c4f70ab754a674275db42d0be..9c6ccd662172b5d56925555150f264da7eead3a4 100644
--- a/listeB.c
+++ b/listeB.c
@@ -1,19 +1,12 @@
 #include "listeB.h"
 
 
-ListeB nouvelle_listeB(balle data){
-  ListeB L = malloc(sizeof(s_ListeB));
-  L->data = data;
-  L->next = NULL;
-  return L;
-}
-
 void cons_listeB(ListeB *L, balle data){
   ListeB tmp = malloc(sizeof(s_ListeB));
   tmp->data = data;
   tmp->next = *L;
   *L = tmp;
-  return ;
+  return;
 }
 
 bool est_vide_listeB(ListeB L) {
@@ -72,7 +65,7 @@ ListeB tir_update(ListeB LB, ListeP LP, ListeR LR, ListeE *LE, int time, SDL_Tex
   //Si perso en train de tirer
   s_ListeP *tmp = LP;
   while(tmp != NULL){
-    if(tmp->data.tir){
+    if(tmp->data.tir && tmp->data.ennemi == false){
       //On fait pop une nouvelle balle toutes les X ms
       if(time > tmp->data.tempsTirPrecedent + 200) {
         cons_listeB(&LB, nouvelle_balle(balleLongueJaune, tmp->data.angle, tmp->data.degats, tmp->data.pos));
diff --git a/listeB.h b/listeB.h
index e8d285cf777c4d501ccf16ca52c759ac7d3a2ecb..7da1c16488135c8902959b7e86413a7890817bfb 100644
--- a/listeB.h
+++ b/listeB.h
@@ -11,7 +11,7 @@ struct s_ListeB
     balle data;
 };
 
-ListeB nouvelle_listeB(balle data);
+
 void cons_listeB(ListeB *L, balle data);
 bool est_vide_listeB(ListeB L);
 ListeB incrementer_balles(ListeB LB, ListeP LP, ListeR LR, ListeE *LE, int v, int xCamera, int yCamera,  SDL_Texture **sprites);
diff --git a/listeE.c b/listeE.c
index 3c1323a8bee6e6b81dc691fdf086769f20452c08..2d5715434346590124ea4b598110996867a8a5b9 100644
--- a/listeE.c
+++ b/listeE.c
@@ -1,5 +1,6 @@
 #include "listeE.h"
 
+
 void cons_listeE(ListeE *L, Effet data){
   ListeE tmp = malloc(sizeof(s_ListeE));
   tmp->data = data;
@@ -12,7 +13,7 @@ void animer_effets(ListeE L){
   ListeE tmp;
   while(L != NULL){
     L->data.srcrect.y += L->data.srcrect.h;
-    if(L->data.srcrect.y >= L->data.xMax){
+    if(L->data.srcrect.y >= L->data.yMax){
       if(L->next == NULL){
         tmp = NULL;
         L = tmp;
diff --git a/listeP.c b/listeP.c
index af8a6c878485f26107a1ae0bfd804c4fd640cd20..1e5796c3809a35e1b9740de164954a331ea0fe48 100644
--- a/listeP.c
+++ b/listeP.c
@@ -1,14 +1,6 @@
 #include "listeP.h"
 
 
-
-ListeP nouvelle_listeP(Perso data){
-  ListeP L = malloc(sizeof(s_ListeP));
-  L->data = data;
-  L->next = NULL;
-  return L;
-}
-
 void cons_listeP(ListeP *L, Perso data){
   ListeP tmp = malloc(sizeof(s_ListeP));
   tmp->data = data;
@@ -24,6 +16,7 @@ bool est_vide_listeP(ListeP L){
 }
 
 void afficher_listeP(SDL_Renderer *renderer, ListeP L){
+
   ListeP tmp = L;
   while(tmp != NULL) {
     afficher_perso(renderer, tmp->data);
@@ -32,6 +25,7 @@ void afficher_listeP(SDL_Renderer *renderer, ListeP L){
 }
 
 Perso* joueur(ListeP L){
+
   while(L != NULL){
     if(L->data.ennemi == false){
       return &L->data;
@@ -41,14 +35,39 @@ Perso* joueur(ListeP L){
   return NULL;
 }
 
+void deplacement_ennemi(Perso *p, Perso *joueur, int xCamera, int yCamera, int dxCamera, int dyCamera){
+
+  int dX = 0;
+  int dY = 0;
+
+  if(p != NULL){
+    if(p->ennemi){
+      //M�j de la direction du perso
+      angle_ennemi(p);
+      //Compensation du d�calage de la cam�ra + ajout du d�placement
+      dX = p->pos.x + round(-dxCamera + cos(p->angle) * p->vitesse);
+      dY = p->pos.y + round(-dyCamera + sin(p->angle) * p->vitesse);
+      //if(!detecter_collision_avec_joueur(p, joueur)){
+        detecter_collision_avec_joueur(p, joueur);
+        p->pos.x = dX;
+        p->pos.y = dY;
+    //  }
+
+      p->angle = (p->angle * 180.0000)/PI;
+    }
+  }
+  return;
+}
 
 void deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera){
+  Perso *joueur_ptr = joueur(L);
   while(L != NULL){
-    if(L->data.vie <= 0){
+    if(L->data.vie <= 0 && L->data.ennemi){
       *L = *L->next;
       L = L->next;
     } else {
-      deplacement_ennemi(&L->data, xCamera, yCamera, dxCamera, dyCamera);
+      deplacement_ennemi(&L->data, joueur_ptr, xCamera, yCamera, dxCamera, dyCamera);
+
       L = L->next;
     }
   }
@@ -56,8 +75,10 @@ void deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int d
 }
 
 bool detecter_collision_perso(ListeP L, ListeE *LE, SDL_Rect rect, int degats, int xCamera, int yCamera, SDL_Texture **sprites){
+
   int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2;
   Effet e;
+
   while(L != NULL){
     ax1 = rect.x;
     ax2 = rect.x + rect.w ;
@@ -80,12 +101,35 @@ bool detecter_collision_perso(ListeP L, ListeE *LE, SDL_Rect rect, int degats, i
 
 }
 
-void animer_persos(ListeP L){
+void detecter_collision_avec_joueur(Perso *p, Perso *joueur){
+
+  int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2;
+
+  ax1 = p->pos.x;
+  ax2 = p->pos.x + p->pos.w ;
+  bx1 = joueur->pos.x + 0.3 * joueur->pos.w;
+  bx2 = joueur->pos.x + 0.7 * joueur->pos.w;
+  ay1 = p->pos.y;
+  ay2 = p->pos.y + p->pos.h;
+  by1 = joueur->pos.y + 0.3 * joueur->pos.h;
+  by2 = joueur->pos.y + 0.7 * joueur->pos.h;
+
+  if(ax1 < bx2 && ax2 > bx1 && ay1 < by2 && ay2 > by1){
+    p->tir = true;
+    p->vitesse = 1;
+  }
+
+  return;
+}
+
+
+void animer_persos(ListeP L, SDL_Texture **sprites, Perso *joueur){
+
  while(L != NULL){
-    if(L->data.ennemi){
-      animer_perso(&L->data);
-    }
-    L = L->next;
+  if(L->data.ennemi){
+    animer_perso(&L->data, joueur, sprites);
+  }
+  L = L->next;
   }
   return;
 }
diff --git a/listeP.h b/listeP.h
index ce6c11408b367717d92a9fd3e87fa8998b5e5a07..b396fe32506014fc12fc6190e5f36a18aa3e5e19 100644
--- a/listeP.h
+++ b/listeP.h
@@ -13,14 +13,15 @@ struct s_ListeP
 
 
 
-ListeP nouvelle_listeP(Perso data);
 void cons_listeP(ListeP *L, Perso data);
 bool est_vide_listeP(ListeP L);
 void afficher_listeP(SDL_Renderer *renderer, ListeP L);
 Perso* joueur(ListeP L);
 void supprimer_ennemi(ListeP L);
+void deplacement_ennemi(Perso *p, Perso *joueur, int xCamera, int yCamera, int dxCamera, int dyCamera);
 void deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera);
 bool detecter_collision_perso(ListeP L, ListeE *LE, SDL_Rect rect, int degats, int xCamera, int yCamera, SDL_Texture **sprites);
-void animer_persos(ListeP L);
+void detecter_collision_avec_joueur(Perso *p, Perso *joueur);
+void animer_persos(ListeP L, SDL_Texture **sprites, Perso *joueur);
 
 
diff --git a/listeR.c b/listeR.c
index eeeb326996ba547a438fceb3aa90abc386e8030c..4c3e022315a7cd9c96cbf51589f955de22c6a9de 100644
--- a/listeR.c
+++ b/listeR.c
@@ -1,14 +1,6 @@
 #include "listeR.h"
 
 
-
-ListeR nouvelle_listeR(SDL_Rect data){
-  ListeR L = malloc(sizeof(s_ListeR));
-  L->data = data;
-  L->next = NULL;
-  return L;
-}
-
 void cons_listeR(ListeR *L, SDL_Rect data){
   ListeR tmp = malloc(sizeof(s_ListeR));
   tmp->data = data;
diff --git a/listeR.h b/listeR.h
index de909782ef6f7984cff35582f4f6d5ff51c65cc0..aab23b07c45e50531fef4568e6d2445a3e8cf02b 100644
--- a/listeR.h
+++ b/listeR.h
@@ -9,7 +9,7 @@ struct s_ListeR
   SDL_Rect data;
 };
 
-ListeR nouvelle_listeR(SDL_Rect data);
+
 void cons_listeR(ListeR *L, SDL_Rect data);
 void charger_niveau(int *tab, ListeR *L);
 bool detecter_collision_murs(ListeR L, SDL_Rect rect, int xCamera, int yCamera);
diff --git a/main.c b/main.c
index 207bdffc0d9396e8473862a42b769a17376e22b9..827c089763c815e7b69108dbeae840263de5ea78 100644
--- a/main.c
+++ b/main.c
@@ -5,24 +5,20 @@
 int main(int argc, char *argv[])
 {
     srand(time(NULL));
-    bool gameover = false;
-    bool tir = false;
+    bool gameover, tir, exit;
     SDL_Window *fenetre;
     SDL_Event evenements;
     SDL_Renderer *ecran;
-    SDL_Texture *fond, *perso, *balleLongueJaune;
-    SDL_Rect persoPos;
+    SDL_Texture *tmp, *balleSprite, *sprites[4], *spritesMap[9];
     float mouseX, mouseY;
-    int vitesse = 25, tempsActuel = 0, tempsPrecedent = 0, tempsActuelTir = 0, tempsActuelAnim = 0, tempsPrecedentAnim = 0;
+    int vitesse, tempsActuel, tempsPrecedent, tempsActuelTir, tempsActuelAnim, tempsPrecedentAnim,
+        xCamera, yCamera, dxCamera, dyCamera, map[30][30]; ;
     ListeB ballesTirees;
     ListeP persosListe;
     ListeR mursListe;
     ListeE effetsListe;
-    Perso *joueur_ptr;
-    SDL_Texture *sprites[3];
-    SDL_Texture *spritesMap[9];
-    int xCamera = 0, yCamera = 0, dxCamera = 0, dyCamera = 0;
-    int map[30][30];
+    Perso p, *joueur_ptr;
+
 
 
     //Initialisation SDL
@@ -48,10 +44,8 @@ int main(int argc, char *argv[])
     ecran = SDL_CreateRenderer(fenetre, -1, SDL_RENDERER_ACCELERATED);
 
     //Chargement images
-    balleLongueJaune = charger_image("sprites/projectiles/balle/balle_longue_jaune.png", ecran, 255, 255, 255);
-
-
-    //Chargement du d�cor (murs etc)
+    balleSprite = charger_image("sprites/projectiles/balle/balle_longue_jaune.png", ecran, 255, 255, 255);
+    //Murs + Sols
     spritesMap[0] = charger_image("sprites/map/sol.png", ecran, 0, 0, -1);
     spritesMap[1] = charger_image("sprites/map/mur_h.png", ecran, 255, 255, 255);
     spritesMap[2] = charger_image("sprites/map/mur_b.png", ecran, 255, 255, 255);
@@ -62,136 +56,155 @@ int main(int argc, char *argv[])
     spritesMap[7] = charger_image("sprites/map/mur_bg.png", ecran, 255, 255, 255);
     spritesMap[8] = charger_image("sprites/map/mur_bd.png", ecran, 255, 255, 255);
 
-    fond = charger_image("sprites/fond.png", ecran, -1, -1, -1);
-    perso = charger_image("sprites/perso/handgun/idle/survivor_idle.png", ecran, 255, 255, 255);
-    sprites[0] = perso;
-    perso = charger_image("sprites/ennemis/zombie/move/zombie_moveV2.png", ecran, 0, 0, -1);
-    sprites[1] = perso;
-    perso = charger_image("sprites/effets/blood/blood_hitv3.png", ecran, 0, 0, -1);
-    sprites[2] = perso;
-
-
-    SDL_Rect tmpRect;
-    tmpRect.x = 0;
-    tmpRect.y = 0;
-    tmpRect.w = 0;
-    tmpRect.h = 0;
-    mursListe = nouvelle_listeR(tmpRect);
-    charger_niveau(map[0], &mursListe);
-
-
-    Perso p = nouveau_joueur(ecran , sprites);
-    persosListe = nouvelle_listeP(p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    cons_listeP(&persosListe, p);
-
-
-    balle b = nouvelle_balle(balleLongueJaune, 0, 0, persoPos);
-    ballesTirees = nouvelle_listeB(b);
-
-    effetsListe = NULL;
-
-    //Boucle de jeu
-    while(!gameover)
-    {
-      //Petit timer pour pas d�passer 60 ex�cutions/sec (provisoire)
-      tempsActuel = SDL_GetTicks();
-      if (tempsActuel > tempsPrecedent + 16)
+    //Personnages + Effets
+    tmp = charger_image("sprites/perso/handgun/idle/survivor_idle.png", ecran, 255, 255, 255);
+    sprites[0] = tmp;
+    tmp = charger_image("sprites/ennemis/zombie/move/zombie_moveV2.png", ecran, 0, 0, -1);
+    sprites[1] = tmp;
+    tmp = charger_image("sprites/ennemis/zombie/attack/zombie_attack.png", ecran, 0, 0, -1);
+    sprites[2] = tmp;
+    tmp = charger_image("sprites/effets/blood/blood_hitv3.png", ecran, 0, 0, -1);
+    sprites[3] = tmp;
+
+    exit = false;
+
+    while(!exit){
+
+      gameover = false;
+      tir = false;
+
+      vitesse = 25;
+      tempsActuel = 0;
+      tempsPrecedent = 0;
+      tempsActuelTir = 0;
+      tempsActuelAnim = 0;
+      tempsPrecedentAnim = 0;
+      xCamera = 0;
+      yCamera = 0;
+      dxCamera = 0;
+      dyCamera = 0;
+
+      mursListe = NULL;
+      ballesTirees = NULL;
+      effetsListe = NULL;
+      persosListe = NULL;
+      joueur_ptr = NULL;
+
+      charger_niveau(map[0], &mursListe);
+
+      p = nouveau_joueur(ecran, sprites);
+      cons_listeP(&persosListe, p);
+      p = nouvel_ennemi_1(ecran, sprites);
+      cons_listeP(&persosListe, p);
+      p = nouvel_ennemi_1(ecran, sprites);
+      cons_listeP(&persosListe, p);
+      p = nouvel_ennemi_1(ecran, sprites);
+      cons_listeP(&persosListe, p);
+      p = nouvel_ennemi_1(ecran, sprites);
+      cons_listeP(&persosListe, p);
+
+
+
+      //Boucle de jeu
+      while(!gameover)
       {
-        //D�tection �v�nements
-        while(SDL_PollEvent(&evenements))
+        tempsActuel = SDL_GetTicks();
+        if (tempsActuel > tempsPrecedent + 16)
         {
-          switch(evenements.type)
+          //D�tection �v�nements
+          while(SDL_PollEvent(&evenements))
           {
-            case SDL_QUIT:
-              gameover = true;
-              break;
-            case SDL_MOUSEMOTION:
-              mouseX = evenements.motion.x;
-              mouseY = evenements.motion.y;
-              break;
-            case SDL_MOUSEBUTTONDOWN:
-              switch(evenements.button.button)
-              {
-                case SDL_BUTTON_LEFT:
-                  tir = true;
-                  break;
-              }
-              break;
-            case SDL_MOUSEBUTTONUP:
-              switch(evenements.button.button)
-              {
-                case SDL_BUTTON_LEFT:
-                  tir = false;
-                  break;
-              }
-              break;
-
-            case SDL_KEYDOWN:
-              switch(evenements.key.keysym.sym)
-              {
-                case SDLK_ESCAPE:
-                  gameover = true;
-                  break;
-              }
-              break;
-
+            switch(evenements.type)
+            {
+              case SDL_QUIT:
+                gameover = true;
+                exit = true;
+                break;
+              case SDL_MOUSEMOTION:
+                mouseX = evenements.motion.x;
+                mouseY = evenements.motion.y;
+                break;
+              case SDL_MOUSEBUTTONDOWN:
+                switch(evenements.button.button)
+                {
+                  case SDL_BUTTON_LEFT:
+                    tir = true;
+                    break;
+                }
+                break;
+              case SDL_MOUSEBUTTONUP:
+                switch(evenements.button.button)
+                {
+                  case SDL_BUTTON_LEFT:
+                    tir = false;
+                    break;
+                }
+                break;
+
+              case SDL_KEYDOWN:
+                switch(evenements.key.keysym.sym)
+                {
+                  case SDLK_ESCAPE:
+                    gameover = true;
+                    exit = true;
+                    break;
+                }
+                break;
+
+            }
           }
-        }
 
 
-        joueur_ptr = joueur(persosListe);
-        if(joueur_ptr != NULL){
-          //Gestion d�placement/angle de tir
-          joueur_ptr->tir = tir;
-          deplacement_joueur(joueur_ptr, mursListe, &xCamera, &yCamera, &dxCamera, &dyCamera);
-          angle_joueur((joueur_ptr), mouseX, mouseY);
-        }
-
+          joueur_ptr = joueur(persosListe);
+          if(joueur_ptr != NULL){
+            //Gestion d�placement/angle de tir
+            joueur_ptr->tir = tir;
+            deplacement_joueur(joueur_ptr, mursListe, &xCamera, &yCamera, &dxCamera, &dyCamera);
+            angle_joueur((joueur_ptr), mouseX, mouseY);
+          }
 
-        tempsActuelAnim = SDL_GetTicks();
-        if(tempsActuelAnim > tempsPrecedentAnim + 40 ){
-          animer_persos(persosListe);
-          animer_effets(effetsListe);
-          tempsPrecedentAnim = tempsActuelAnim;
-        }
 
+          tempsActuelAnim = SDL_GetTicks();
+          if(tempsActuelAnim > tempsPrecedentAnim + 40 ){
+            animer_persos(persosListe, sprites, joueur_ptr);
+            animer_effets(effetsListe);
+            tempsPrecedentAnim = tempsActuelAnim;
+          }
 
+          //D�tection mort joueur
+          if(joueur_ptr->vie <= 0){
+            gameover = true;
+          }
 
 
+          //D�placement/angle de tir ennemis
+          deplacement_ennemis(persosListe, xCamera, yCamera, dxCamera, dyCamera);
 
-        //D�placement/angle de tir ennemis
-        deplacement_ennemis(persosListe, xCamera, yCamera, dxCamera, dyCamera);
+          //Tir
+          tempsActuelTir = SDL_GetTicks();
+          ballesTirees = tir_update(ballesTirees, persosListe, mursListe, &effetsListe, tempsActuelTir, balleSprite, vitesse, xCamera, yCamera, sprites);
 
-        //Tir
-        tempsActuelTir = SDL_GetTicks();
-        ballesTirees = tir_update(ballesTirees, persosListe, mursListe, &effetsListe, tempsActuelTir, balleLongueJaune, vitesse, xCamera, yCamera, sprites);
+          //Affichage
+          SDL_RenderClear(ecran);
+          afficher_niveau(map[0], ecran, spritesMap, xCamera, yCamera);
+          afficher_listeE(ecran, effetsListe, dxCamera, dyCamera);
+          afficher_listeP(ecran, persosListe);
+          afficher_listeB(ecran, ballesTirees);
+          SDL_RenderPresent(ecran);
 
-        //Affichage
-        SDL_RenderClear(ecran);
-        afficher_niveau(map[0], ecran, spritesMap, xCamera, yCamera);
-        afficher_listeE(ecran, effetsListe, dxCamera, dyCamera);
-        afficher_listeP(ecran, persosListe);
-        afficher_listeB(ecran, ballesTirees);
-        SDL_RenderPresent(ecran);
-        tempsPrecedent = tempsActuel;
+          tempsPrecedent = tempsActuel;
+        }
       }
+
+      if(gameover)
+      printf("gameover :(\n");
+
     }
 
     //Nettoyage
     SDL_DestroyWindow(fenetre);
-    SDL_DestroyTexture(fond);
-    SDL_DestroyTexture(perso);
+    SDL_DestroyTexture(balleSprite);;
+    SDL_DestroyTexture(tmp);
     IMG_Quit();
     SDL_Quit();
     return EXIT_SUCCESS;
diff --git a/personnage.c b/personnage.c
index 88109d00d419bc5fb45144d968dac79597d72d88..2621e0d5de16585fcc2a3e7ec8253e60ba591f12 100644
--- a/personnage.c
+++ b/personnage.c
@@ -105,19 +105,6 @@ void deplacement_joueur(Perso *p, ListeR L, int *xCamera, int *yCamera, int *dxC
   return;
 }
 
-void deplacement_ennemi(Perso *p, int xCamera, int yCamera, int dxCamera, int dyCamera){
-  if(p != NULL){
-    if(p->ennemi){
-      //M�j de la direction du perso
-      angle_ennemi(p);
-      //Compensation du d�calage de la cam�ra + ajout du d�placement
-      p->pos.x += round(-dxCamera + cos(p->angle) * p->vitesse);
-      p->pos.y += round(-dyCamera + sin(p->angle) * p->vitesse);
-      p->angle = (p->angle * 180.0000)/PI;
-    }
-  }
-  return;
-}
 
 void angle_joueur(Perso *p, float mouseX, float mouseY){
   float angle;
@@ -134,11 +121,47 @@ void angle_ennemi(Perso *p){
   return;
 }
 
-void animer_perso(Perso *p){
-  p->srcrect.y += p->srcrect.h * p->animFlip;
-  if(p->srcrect.y >= p->yMax|| p->srcrect.y < 0){
-    p->animFlip = -p->animFlip;
+void animer_perso(Perso *p, Perso *joueur, SDL_Texture **sprites){
+  if(p->tir){
+    if(p->srcrect.w != 318){
+      p->image = sprites[2];
+      p->pos.w = 60;
+      p->pos.h = 60;
+      p->srcrect.w = 318;
+      p->srcrect.h = 294;
+      p->srcrect.y = 0;
+      p->yMax = 2646;
+      p->animFlip = 1;
+    } else {
+      p->srcrect.y += p->srcrect.h * p->animFlip;
+      if(p->srcrect.y == p->srcrect.h * 6){
+        if(joueur->vie < p->degats){
+          joueur->vie = 0;
+        }else {
+          joueur->vie -= p->degats;
+        }
+      } else if(p->srcrect.y == p->yMax){
+        p->image = sprites[1];
+        p->pos.w = 50;
+        p->pos.h = 50;
+        p->srcrect.w = 229;
+        p->srcrect.h = 259;
+        p->srcrect.y = 0;
+        p->yMax = 4403;
+        p->animFlip = 1;
+        p->tir = false;
+        p->vitesse = 2;
+      }
+    }
+
+  }
+
+  else {
     p->srcrect.y += p->srcrect.h * p->animFlip;
+    if((p->srcrect.y >= p->yMax || p->srcrect.y < 0) && !p->tir){
+      p->animFlip = -p->animFlip;
+      p->srcrect.y += p->srcrect.h * p->animFlip;
+    }
   }
   return;
 }
diff --git a/personnage.h b/personnage.h
index 063d219de95ca2c5d9ac535debf6622526569917..7bb9754de1f1cf046180fc8e96273a5ec97b5779 100644
--- a/personnage.h
+++ b/personnage.h
@@ -1,4 +1,5 @@
 #include <time.h>
+#include <stdio.h>
 #include <math.h>
 #include "image.h"
 #include "listeR.h"
@@ -19,6 +20,7 @@ struct s_Personnage
   int degats;
   int vitesse;
   int animFlip;
+  int yMax;
   bool tir;
   bool ennemi;
 };
@@ -28,8 +30,7 @@ Perso nouveau_joueur(SDL_Renderer *renderer, SDL_Texture **sprites);
 Perso nouvel_ennemi_1(SDL_Renderer *renderer, SDL_Texture **sprites);
 void afficher_perso(SDL_Renderer *renderer, Perso p);
 void deplacement_joueur(Perso *p, ListeR L, int *xCamera, int *yCamera, int *dxCamera, int *dyCamera);
-void deplacement_ennemi(Perso *p, int xCamera, int yCamera, int dxCamera, int dyCamera);
 void angle_ennemi(Perso *p);
 void angle_joueur(Perso *p, float mouseX, float mouseY);
-void animer_perso(Perso *p);
+void animer_perso(Perso *p, Perso *joueur, SDL_Texture **sprites);
 
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_0.png b/sprites/ennemis/zombie/attack/skeleton-attack_0.png
deleted file mode 100644
index 065cb415e20af639229419ea274e0ef3ffe4982a..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_0.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_1.png b/sprites/ennemis/zombie/attack/skeleton-attack_1.png
deleted file mode 100644
index 23b33f651d0ccd124e645e4ac87ec207a8f01064..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_1.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_2.png b/sprites/ennemis/zombie/attack/skeleton-attack_2.png
deleted file mode 100644
index 778fb66f3c5d9d39694da1fc74624ca7ed64454c..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_2.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_3.png b/sprites/ennemis/zombie/attack/skeleton-attack_3.png
deleted file mode 100644
index ee6db3ab2e4d839aa85d0d7da444adfb5684aca1..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_3.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_4.png b/sprites/ennemis/zombie/attack/skeleton-attack_4.png
deleted file mode 100644
index d2006f641aafa76216438f13be79b45c81336582..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_4.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_5.png b/sprites/ennemis/zombie/attack/skeleton-attack_5.png
deleted file mode 100644
index 8d3ba16b675ce0bde6ded1a092a092699d8c7547..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_5.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_6.png b/sprites/ennemis/zombie/attack/skeleton-attack_6.png
deleted file mode 100644
index 1e0b577a00e8b9361a9c21ad2b1da15a23c4479a..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_6.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_7.png b/sprites/ennemis/zombie/attack/skeleton-attack_7.png
deleted file mode 100644
index 27494e0fcc8960c057db31ff200889b5a202e52a..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_7.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_8.png b/sprites/ennemis/zombie/attack/skeleton-attack_8.png
deleted file mode 100644
index 065cb415e20af639229419ea274e0ef3ffe4982a..0000000000000000000000000000000000000000
Binary files a/sprites/ennemis/zombie/attack/skeleton-attack_8.png and /dev/null differ
diff --git a/sprites/ennemis/zombie/attack/zombie_attack.png b/sprites/ennemis/zombie/attack/zombie_attack.png
new file mode 100644
index 0000000000000000000000000000000000000000..b28804403ea110f0c82f8f971e7651207944b1e6
Binary files /dev/null and b/sprites/ennemis/zombie/attack/zombie_attack.png differ
diff --git a/sprites/fond.png b/sprites/fond.png
deleted file mode 100644
index 9be62928bc1a9491e0585b23263c35b0f314dd36..0000000000000000000000000000000000000000
Binary files a/sprites/fond.png and /dev/null differ
diff --git a/sprites/mur.png b/sprites/mur.png
deleted file mode 100644
index 9651a050c7c8a843c74ab7fce7cb01a165f012da..0000000000000000000000000000000000000000
Binary files a/sprites/mur.png and /dev/null differ
diff --git a/sprites/perso/ennemi_1.png b/sprites/perso/ennemi_1.png
deleted file mode 100644
index 2dd4e4681a6604f564a4a8c403ea5021ca510728..0000000000000000000000000000000000000000
Binary files a/sprites/perso/ennemi_1.png and /dev/null differ
diff --git a/sprites/projectiles/balle/balle_longue_jaune2.png b/sprites/projectiles/balle/balle_longue_jaune2.png
deleted file mode 100644
index 0040e53419676b3e7b9f060f40d2801afbc05bb3..0000000000000000000000000000000000000000
Binary files a/sprites/projectiles/balle/balle_longue_jaune2.png and /dev/null differ
diff --git a/sprites/projectiles/balle/spr_bullet_strip02.png b/sprites/projectiles/balle/spr_bullet_strip02.png
deleted file mode 100644
index 67bfcbdfc1b67e653d47314c75b62f80384ef203..0000000000000000000000000000000000000000
Binary files a/sprites/projectiles/balle/spr_bullet_strip02.png and /dev/null differ
diff --git a/sprites/projectiles/balle/spr_bullet_strip03.png b/sprites/projectiles/balle/spr_bullet_strip03.png
deleted file mode 100644
index cfd57834e88d010edc0f80593a60b588650bb819..0000000000000000000000000000000000000000
Binary files a/sprites/projectiles/balle/spr_bullet_strip03.png and /dev/null differ