diff --git a/clavier.c b/clavier.c
index e5fde5f5a1ae624920418023d8f3d8edb856a7a4..3a4a1d88d94ef8f62cc71ba5f94bea8a9d1a198d 100644
--- a/clavier.c
+++ b/clavier.c
@@ -1,27 +1,12 @@
-#include <SDL2/SDL.h>
+/* #include <SDL2/SDL.h>
 #include "clavier.h"
+#include <stdio.h>
+
+
+
+
 
 
-/* FICHIER A RENOMMER */
-
-
-ListeB tir_update(ListeB LB, ListeP LP, int time, SDL_Texture *balleLongueJaune, int v){
-  //Si perso en train de tirer
-  s_ListeP *tmp = LP;
-  while(tmp != NULL){
-    if(tmp->data.tir){
-      //On fait pop une nouvelle balle toutes les X ms
-      if(time > tmp->data.tempsTirPrecedent + 200) {
-        LB = cons_listeB(LB, nouvelle_balle(balleLongueJaune, tmp->data.angle, tmp->data.pos));
-        tmp->data.tempsTirPrecedent = time;
-      }
-    }
-    tmp = tmp->next;
-  }
-  //On met a jour les coordonn�es des balles d�j� tir�es, d�pop si n�c�ssaire
-  LB = incrementer_balles(LB, v);
-  return LB;
-}
 
 void animer_persos(ListeP L){
   s_ListeP *tmp = L;
@@ -29,3 +14,6 @@ void animer_persos(ListeP L){
   animer_perso(&tmp->data);
   return;
 }
+
+
+*/
diff --git a/clavier.h b/clavier.h
index 4214dde1720156297bf930f63fea778aa8e3eb59..aa078d7a90c85456fad52f474e7f5c203475c1fe 100644
--- a/clavier.h
+++ b/clavier.h
@@ -1,9 +1,9 @@
-#include <SDL2/SDL.h>
-#include "listeP.h"
+/*#include <SDL2/SDL.h>
 #include "listeB.h"
 
-/* FICHIER A RENOMMER */
 
 
-ListeB tir_update(ListeB LB, ListeP LP, int time, SDL_Texture *balleLongueJaune, int v);
-void animer_persos(ListeP L);
+
+
+void animer_persos(ListeP L);*/
+
diff --git a/image.c b/image.c
index 6a390674bcecf8593dacc852543c17e9a530904b..69ee4ca7f4e116a07d4b80986b144c0a2bde8e6c 100644
--- a/image.c
+++ b/image.c
@@ -1,13 +1,32 @@
 #include "image.h"
-#include <SDL2/SDL.h>
-#include <SDL2/SDL_image.h>
 
-SDL_Texture* charger_image(const char* cheminFichier, SDL_Renderer* renderer)
+
+SDL_Texture* charger_image(const char* cheminFichier, SDL_Renderer* renderer, int r, int g, int b)
 {
   SDL_Surface* surface = IMG_Load(cheminFichier);
-  SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 255, 255, 255 ));
+  if(r >= 0 && g >= 0 && b >= 0){
+    SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, r, g, b ));
+  }
   SDL_Texture* image = SDL_CreateTextureFromSurface(renderer, surface);
   SDL_FreeSurface(surface);
   return image;
 }
 
+void afficher_niveau(int *tab, SDL_Renderer *renderer, SDL_Texture **spriteMap, int xCamera, int yCamera){
+  SDL_Rect destrect;
+  destrect.h = 50;
+  destrect.w = 50;
+  for(int j = 0; j < 30; j++){
+    for(int i = 0; i < 30; i++){
+      destrect.x = i * 50 - xCamera;
+      destrect.y = j * 50 - yCamera;
+      SDL_RenderCopy(renderer, spriteMap[0], NULL, &destrect);
+      for(int k = 1; k < 9; k++){
+        if(tab[30*j+i] == k){
+          SDL_RenderCopy(renderer, spriteMap[k], NULL, &destrect);
+        }
+      }
+    }
+  }
+  return;
+}
diff --git a/image.h b/image.h
index ff79863f370f939cf8c447644c2dbde1d8a0ff8b..df42d8bb70cbe3a376bae15bd17fb296427ce92f 100644
--- a/image.h
+++ b/image.h
@@ -1,4 +1,5 @@
 #include <SDL2/SDL.h>
+#include <SDL2/SDL_image.h>
 
-SDL_Texture* charger_image(const char* fichier, SDL_Renderer* renderer);
-
+SDL_Texture* charger_image(const char* fichier, SDL_Renderer* renderer, int r, int g, int b);
+void afficher_niveau(int *tab, SDL_Renderer *renderer, SDL_Texture **spriteMap, int xCamera, int yCamera);
diff --git a/listeB.c b/listeB.c
index 18e80461a60e40d87d596d29a705f5470b09adb5..a3adaf421bc5a5c6b0e4d05eff396da2a560910b 100644
--- a/listeB.c
+++ b/listeB.c
@@ -1,7 +1,6 @@
-#include <stdio.h>
-#include <stdlib.h>
 #include "listeB.h"
 
+
 ListeB nouvelle_listeB(balle data){
   ListeB L = malloc(sizeof(s_ListeB));
   L->data = data;
@@ -21,23 +20,42 @@ bool est_vide_listeB(ListeB L) {
 }
 
 
-ListeB incrementer_balles(ListeB L, int v)
+
+ListeB incrementer_balles(ListeB LB, ListeP LP, ListeR LR, int v, int xCamera, int yCamera)
 {
-  if(L == NULL){
-    return L;
+  if(LB == NULL){
+    return LB;
   }
 
-  //L->data = incrementer_balle(L->data, v);
-  incrementer_balle(&L->data, v);
+  incrementer_balle(&LB->data, v);
 
-  if(L->data.ballePos.x <= -60 || L->data.ballePos.x >= 1000 || L->data.ballePos.y <= -60 || L->data.ballePos.y >= 720){
-    L = L->next;
-    return incrementer_balles(L, v);
-  } else {
-    L->next = incrementer_balles(L->next, v);
-    return L;
+  SDL_Rect ballePos;
+  ballePos.w = 1;
+  ballePos.h = 1;
+  ballePos.x = LB->data.ballePos.x + 20;
+  ballePos.y = LB->data.ballePos.y + 20;
+
+  if(ballePos.x < 0 || ballePos.x >= 1000 || ballePos.y <= 0 || ballePos.y >= 700
+     || detecter_collision_murs(LR, ballePos, xCamera, yCamera)){
+    LB = LB->next;
+    return incrementer_balles(LB, LP, LR, v, xCamera, yCamera);
   }
 
+  ballePos.w = 6;
+  ballePos.h = 6;
+  ballePos.x = LB->data.ballePos.x - 3;
+  ballePos.y = LB->data.ballePos.y - 3;
+
+  if(detecter_collision_perso(LP, ballePos, xCamera, yCamera)) {
+    LB = LB->next;
+    return incrementer_balles(LB, LP, LR, v, xCamera, yCamera);
+  }
+
+
+  LB->next = incrementer_balles(LB->next, LP, LR, v, xCamera, yCamera);
+  return LB;
+
+
   return NULL;
 }
 
@@ -49,3 +67,21 @@ void afficher_listeB(SDL_Renderer *renderer, ListeB L) {
   }
 }
 
+ListeB tir_update(ListeB LB, ListeP LP, ListeR LR, int time, SDL_Texture *balleLongueJaune, int v, int xCamera, int yCamera){
+  //Si perso en train de tirer
+  s_ListeP *tmp = LP;
+  while(tmp != NULL){
+    if(tmp->data.tir){
+      //On fait pop une nouvelle balle toutes les X ms
+      if(time > tmp->data.tempsTirPrecedent + 200) {
+        LB = cons_listeB(LB, nouvelle_balle(balleLongueJaune, tmp->data.angle, tmp->data.pos));
+        tmp->data.tempsTirPrecedent = time;
+      }
+    }
+    tmp = tmp->next;
+  }
+  //On met a jour les coordonn�es des balles d�j� tir�es, d�pop si n�c�ssaire
+  LB = incrementer_balles(LB, LP, LR, v, xCamera, yCamera);
+  return LB;
+}
+
diff --git a/listeB.h b/listeB.h
index 1380b496f851ba4240b000db53bb3e1f5f21f9e5..a3f75e9f5048a4dcd35b63efa2d6156e0f4f3669 100644
--- a/listeB.h
+++ b/listeB.h
@@ -1,5 +1,6 @@
-#include "projectile.h"
-#include <stdbool.h>
+#include <stdio.h>
+#include "projectile.h"
+#include "listeP.h"
 
 typedef struct s_ListeB *ListeB, s_ListeB;
 struct s_ListeB
@@ -11,5 +12,6 @@ struct s_ListeB
 ListeB nouvelle_listeB(balle data);
 ListeB cons_listeB(ListeB L, balle data);
 bool est_vide_listeB(ListeB L);
-ListeB incrementer_balles(ListeB L, int v);
+ListeB incrementer_balles(ListeB LB, ListeP LP, ListeR LR, int v, int xCamera, int yCamera);
 void afficher_listeB(SDL_Renderer *renderer, ListeB L);
+ListeB tir_update(ListeB LB, ListeP LP, ListeR LR, int time, SDL_Texture *balleLongueJaune, int v, int xCamera, int yCamera);
diff --git a/listeP.c b/listeP.c
index 444f826fa6d698a22d8d6884e59a5e3d3f7dc0f8..0cb33d8e811cb827ed8cb2668ee9e7fa76f8802e 100644
--- a/listeP.c
+++ b/listeP.c
@@ -1,14 +1,13 @@
-#include <stdio.h>
-#include <stdlib.h>
 #include "listeP.h"
 
+
+
 ListeP nouvelle_listeP(Perso data){
   ListeP L = malloc(sizeof(s_ListeP));
   L->data = data;
   L->next = NULL;
   return L;
-
-};
+}
 
 ListeP cons_listeP(ListeP L, Perso data){
   ListeP tmp = nouvelle_listeP(data);
@@ -38,3 +37,57 @@ Perso* joueur(ListeP L){
   }
   return NULL;
 }
+
+
+
+ListeP deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera){
+
+  if(L == NULL){
+    return L;
+  }
+
+  s_ListeP *tmp = L;
+  while(tmp != NULL){
+    deplacement_ennemi(&tmp->data, xCamera, yCamera, dxCamera, dyCamera);
+    tmp = tmp->next;
+  }
+
+  return L;
+
+}
+
+bool detecter_collision_perso(ListeP L, SDL_Rect rect, int xCamera, int yCamera){
+  int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2;
+  while(L != NULL){
+    ax1 = rect.x;//+ xCamera;
+    ax2 = rect.x + rect.w ;//+ xCamera;
+    bx1 = L->data.pos.x;
+    bx2 = L->data.pos.x + L->data.pos.w;
+    ay1 = rect.y;// + yCamera;
+    ay2 = rect.y;// + rect.h + yCamera;
+    by1 = L->data.pos.y;
+    by2 = L->data.pos.y + L->data.pos.h;
+    if(ax1 < bx2 && ax2 > bx1 && ay1 < by2 && ay2 > by1 && L->data.ennemi){
+      return true;
+    }
+    L = L->next;
+  }
+  return false;
+
+}
+
+void animer_persos2(ListeP L){
+ while(L != NULL){
+    if(L->data.ennemi){
+      animer_perso(&L->data);
+    }
+    L = L->next;
+  }
+}
+
+void animer_persos(ListeP L){
+
+  animer_persos2(L);
+  return;
+}
+
diff --git a/listeP.h b/listeP.h
index b4ea68649d263cb2873acb4379d700a69b44f7ed..a7e0f05f769f011e5167b44dcd1dff470a923824 100644
--- a/listeP.h
+++ b/listeP.h
@@ -1,5 +1,6 @@
-#include "personnage.h"
-#include <stdbool.h>
+#include "personnage.h"
+#include <stdio.h>
+
 
 typedef struct s_ListeP *ListeP, s_ListeP;
 struct s_ListeP
@@ -13,5 +14,7 @@ ListeP cons_listeP(ListeP L, Perso data);
 bool est_vide_listeP(ListeP L);
 void afficher_listeP(SDL_Renderer *renderer, ListeP L);
 Perso* joueur(ListeP L);
-
-
+ListeP deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera);
+bool detecter_collision_perso(ListeP L, SDL_Rect rect, int xCamera, int yCamera);
+void animer_persos(ListeP L);
+void animer_persos2(ListeP L);
diff --git a/listeR.c b/listeR.c
new file mode 100644
index 0000000000000000000000000000000000000000..b4cab061b69eb093ab59ffb86e21d7af23547fc0
--- /dev/null
+++ b/listeR.c
@@ -0,0 +1,111 @@
+#include "listeR.h"
+
+
+
+ListeR nouvelle_listeR(SDL_Rect data){
+  ListeR L = malloc(sizeof(s_ListeR));
+  L->data = data;
+  L->next = NULL;
+  return L;
+}
+
+ListeR cons_listeR(ListeR L, SDL_Rect data){
+  ListeR tmp = nouvelle_listeR(data);
+  tmp->next = L;
+  return tmp;
+}
+
+
+ListeR charger_niveau(int *tab, ListeR L){
+  //on met toutes les case � 0 pour dire que tout est du sol (provisoire)
+  for(int j = 0; j < 30; j++){
+    for(int i = 0; i < 30; i++){
+      tab[30*j+i] = 0;
+    }
+  }
+
+  //ici lire fichier et remplacer les cases qu'il faut par 1-8 pour mettre des murs
+  //je mets �a en attendant pour afficher des murs sur le bord de la map
+  for(int j = 0; j < 30; j++){
+    tab[30*j+0] = 3;
+    tab[30*j+29] = 4;
+    tab[30*0+j] = 1;
+    tab[30*29+j] = 2;
+  }
+  tab[30*0+0] = 5;
+  tab[30*0+29] = 6;
+  tab[30*29+0] = 7;
+  tab[30*29+29] = 8;
+
+  //Remplir la liste de murs
+  SDL_Rect rect;
+  for(int j = 0; j < 30; j++){
+    for(int i = 0; i < 30; i++){
+      switch(tab[30*j+i]){
+      case 0:
+        break;
+      case 1:
+        rect.x = i * 50;
+        rect.y = j * 50;
+        rect.h = 25;
+        rect.w = 50;
+        L = cons_listeR(L, rect);
+        break;
+      case 2:
+        rect.x = i * 50;
+        rect.y = j * 50 + 25;
+        rect.h = 25;
+        rect.w = 50;
+        L = cons_listeR(L, rect);
+        break;
+      case 3:
+        rect.x = i * 50;
+        rect.y = j * 50;
+        rect.h = 50;
+        rect.w = 25;
+        L = cons_listeR(L, rect);
+        break;
+      case 4:
+        rect.x = i * 50 + 25;
+        rect.y = j * 50;
+        rect.h = 50;
+        rect.w = 25;
+        L = cons_listeR(L, rect);
+        break;
+
+      case 5:
+      case 6:
+      case 7:
+      case 8:
+        rect.x = i * 50;
+        rect.y = j * 50;
+        rect.h = 50;
+        rect.w = 50;
+        L = cons_listeR(L, rect);
+        break;
+      }
+    }
+  }
+  return L;
+}
+
+
+bool detecter_collision_murs(ListeR L, SDL_Rect rect, int xCamera, int yCamera){
+  s_ListeR *tmp = L;
+  int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2;
+  while(tmp != NULL){
+    ax1 = rect.x + xCamera;
+    ax2 = rect.x + rect.w + xCamera;
+    bx1 = tmp->data.x;
+    bx2 = tmp->data.x + tmp->data.w;
+    ay1 = rect.y + yCamera;
+    ay2 = rect.y + rect.h + yCamera;
+    by1 = tmp->data.y;
+    by2 = tmp->data.y + tmp->data.h;
+    if(ax1 < bx2 && ax2 > bx1 && ay1 < by2 && ay2 > by1){
+      return true;
+    }
+    tmp = tmp->next;
+  }
+  return false;
+}
diff --git a/listeR.h b/listeR.h
new file mode 100644
index 0000000000000000000000000000000000000000..9f06adcaaabf640bc190e7f3f572671cb2814d58
--- /dev/null
+++ b/listeR.h
@@ -0,0 +1,15 @@
+#include <SDL2/SDL.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+typedef struct s_ListeR *ListeR, s_ListeR;
+struct s_ListeR
+{
+  ListeR next;
+  SDL_Rect data;
+};
+
+ListeR nouvelle_listeR(SDL_Rect data);
+ListeR cons_listeR(ListeR L, SDL_Rect data);
+ListeR 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
deleted file mode 100644
index 703029d844129a0e689ddcf3d6602b79d16d5a78..0000000000000000000000000000000000000000
--- a/main.c
+++ /dev/null
@@ -1,238 +0,0 @@
-#include <SDL2/SDL.h>
-#include <SDL2/SDL_image.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <time.h>
-#include "image.h"
-#include "clavier.h"
-
-
-#define RAYON 30.9
-
-int main(int argc, char *argv[])
-{
-    srand(time(NULL));
-    bool gameover = false;
-    bool tir = false;
-    SDL_Window *fenetre;
-    SDL_Event evenements;
-    SDL_Renderer *ecran;
-    SDL_Texture *fond, *perso, *balleLongueJaune, *mur;
-    SDL_Rect persoPos;
-    float mouseX, mouseY;
-    int vitesse = 25, tempsActuel = 0, tempsPrecedent = 0, tempsActuelTir = 0, tempsActuelAnim = 0, tempsPrecedentAnim = 0;
-    ListeB ballesTirees;
-    ListeP persosListe;
-    Perso *joueur_ptr;
-    SDL_Texture *sprites[3];
-
-    SDL_Rect mur1;
-    mur1.x = 500;
-    mur1.y = 500;
-    mur1.h = 100;
-    mur1.w = 104;
-    SDL_Rect mur2;
-    mur2.x = 10;
-    mur2.y = 10;
-    mur2.h = 56;
-    mur2.w = 47;
-    SDL_Rect mur3;
-    mur3.x = 500;
-    mur3.y = 659;
-    mur3.h = 85;
-    mur3.w = 500;
-
-    SDL_Rect tabMur[3];
-    tabMur[0] = mur1;
-    tabMur[1] = mur2;
-    tabMur[2] = mur3;
-
-    /**
-
-    FILE* fichier = NULL;
-    fichier = fopen("map.txt", "r");
-    char caractereActuel;
-    char nombre = "";
-
-    if (fichier != NULL){
-        // Boucle de lecture des caract�res un � un
-        int i = 0;
-        do
-        {
-            if( 'M' == fgetc(fichier)){ // On lit le caract�re
-            printf("J'ai trouv� un mur !");
-            caractereActuel = fgetc(fichier);
-
-            while(caractereActuel != ':'){
-                caractereActuel = fgetc(fichier);
-                nombre = nombre + caractereActuel;
-                printf("%c", nombre);
-
-            }
-            printf("%c", nombre);
-            tabMur[i].x = nombre;
-
-            while(caractereActuel != ':'){
-                caractereActuel = fgetc(fichier);
-            }
-
-            while(caractereActuel != ':'){
-                caractereActuel = fgetc(fichier);
-            }
-            tabMur[i].y = fgetc(fichier);
-
-            while(caractereActuel != ':'){
-                caractereActuel = fgetc(fichier);
-            }
-            tabMur[i].w = fgetc(fichier);
-
-            while(caractereActuel != ':'){
-                caractereActuel = fgetc(fichier);
-            }
-            tabMur[i].h = fgetc(fichier);
-            i++;
-            }
-            else{
-                caractereActuel = fgetc(fichier);
-            }
-
-        } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourn� EOF (fin de fichier)
-
-        fclose(fichier);
-    }
-    */
-
-
-
-    //Initialisation SDL
-    if(SDL_Init(SDL_INIT_VIDEO < 0))
-    {
-      printf("Erreur d'initialisation de la SDL %s", SDL_GetError());
-      SDL_Quit();
-      return EXIT_FAILURE;
-    }
-
-    IMG_Init(IMG_INIT_PNG);
-
-    //Création fenêtre
-    fenetre = SDL_CreateWindow("gameName", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 720, SDL_WINDOW_RESIZABLE);
-    if(fenetre == NULL)
-    {
-      printf("Erreur d'initialisation de la fenetre %s", SDL_GetError());
-      return EXIT_FAILURE;
-    }
-
-    //Création renderer
-    ecran = SDL_CreateRenderer(fenetre, -1, SDL_RENDERER_ACCELERATED);
-
-    //Chargement images
-    balleLongueJaune = charger_image("sprites/projectiles/balle/balle_longue_jaune.png", ecran);
-    fond = charger_image("sprites/fond.png", ecran);
-    mur = charger_image("sprites/mur.png", ecran);
-    perso = charger_image("sprites/perso/handgun/idle/survivor_idle.png", ecran);
-    sprites[0] = perso;
-    perso = charger_image("sprites/perso/handgun/move/survivor_moving.png", ecran);
-    sprites[1] = perso;
-    perso = charger_image("sprites/perso/ennemi_1.png", ecran);
-    sprites[2] = perso;
-
-    Perso p = nouveau_joueur(ecran , sprites);
-    persosListe = nouvelle_listeP(p);
-    p = nouvel_ennemi_1(ecran, sprites);
-    persosListe = cons_listeP(persosListe, p);
-
-    //Pareil pour la balle + ses autres paramètres (voir projectile.h)
-    balle b = nouvelle_balle(balleLongueJaune, 0, persoPos);
-    ballesTirees = nouvelle_listeB(b);
-
-    //Boucle de jeu
-    while(!gameover)
-    {
-      //Petit timer pour pas dépasser 60 exécutions/sec (provisoire)
-      tempsActuel = SDL_GetTicks();
-      if (tempsActuel > tempsPrecedent + 16)
-      {
-        //Détection événements
-        while(SDL_PollEvent(&evenements))
-        {
-          switch(evenements.type)
-          {
-            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;
-
-          }
-        }
-
-
-        joueur_ptr = joueur(persosListe);
-        joueur_ptr->tir = tir;
-
-        tempsActuelAnim = SDL_GetTicks();
-        if(tempsActuelAnim > tempsPrecedentAnim + 70 ){
-          animer_persos(persosListe);
-          tempsPrecedentAnim = tempsActuelAnim;
-        }
-
-
-
-        //Gestion déplacement/angle de tir
-        deplacement_joueur(joueur_ptr, tabMur);
-        angle_joueur((joueur_ptr), mouseX, mouseY);
-
-        //Tir
-        tempsActuelTir = SDL_GetTicks();
-        ballesTirees = tir_update(ballesTirees, persosListe, tempsActuelTir, balleLongueJaune, vitesse);
-
-
-        //Affichage
-        SDL_RenderClear(ecran);
-        SDL_RenderCopy(ecran, fond, NULL, NULL);
-        for(int i = 0; i < 3; i++){
-            SDL_RenderCopyEx(ecran, mur, NULL, &tabMur[i], 0, NULL, SDL_FLIP_NONE);
-        }
-        afficher_listeP(ecran, persosListe);
-        afficher_listeB(ecran, ballesTirees);
-        SDL_RenderPresent(ecran);
-        tempsPrecedent = tempsActuel;
-      }
-    }
-
-    //Nettoyage
-    SDL_DestroyWindow(fenetre);
-    SDL_DestroyTexture(fond);
-    SDL_DestroyTexture(perso);
-    IMG_Quit();
-    SDL_Quit();
-    return EXIT_SUCCESS;
-}
diff --git a/personnage.c b/personnage.c
deleted file mode 100644
index ccc692ebc38acfa593b354f8bc47fb93c36b73a6..0000000000000000000000000000000000000000
--- a/personnage.c
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <time.h>
-#include <stdlib.h>
-#include "personnage.h"
-#include <math.h>
-
-#define PI 3.14159265359
-
-Perso nouveau_joueur(SDL_Renderer *renderer, SDL_Texture **sprites){
-  Perso p;
-  p.tempsTirPrecedent = 0;
-  p.image = sprites[0];
-  p.pos.x = 300;
-  p.pos.y = 300;
-  p.pos.w = 60;
-  p.pos.h = 60;
-  p.srcrect.x = 0;
-  p.srcrect.y = 0;
-  p.srcrect.w = 258;
-  p.srcrect.h = 220;
-  p.angle = 0;
-  p.vie = 100;
-  p.vitesse = 3;
-  p.tir = false;
-  p.ennemi = false;
-  p.anim = IDLE;
-  p.animFlip = 1;
-  return p;
-}
-
-Perso nouvel_ennemi_1(SDL_Renderer *renderer, SDL_Texture **sprites){
-  Perso p;
-  p.tempsTirPrecedent = 0;
-  p.image = sprites[2];
-  //génère des coordonnées de spawn aléatoires(provisoire)
-  p.pos.x = rand()%900 + 100;
-  p.pos.y = rand()%600 + 100;
-  p.pos.w = 60;
-  p.pos.h = 60;
-  p.srcrect.x = 0;
-  p.srcrect.y = 0;
-  p.srcrect.w = 258;
-  p.srcrect.h = 220;
-  p.angle = 0;
-  p.vie = 100;
-  p.vitesse = 3;
-  p.tir = false;
-  p.ennemi = true;
-  p.anim = IDLE;
-  p.animFlip = 1;
-  return p;
-}
-
-void afficher_perso(SDL_Renderer *renderer, Perso p)
-{
-  SDL_RenderCopyEx(renderer, p.image, &p.srcrect, &p.pos, p.angle, NULL, SDL_FLIP_NONE);
-}
-
-void deplacement_joueur(Perso *p, SDL_Rect *tabMur)
-{
-  int dX = 0;
-  int dY = 0;
-
-  const Uint8 *state = SDL_GetKeyboardState(NULL);
-
-  if(state[SDL_GetScancodeFromKey(SDLK_z)]){
-    dY -= 1;
-  }
-
-  if(state[SDL_GetScancodeFromKey(SDLK_s)]){
-    dY += 1;
-  }
-
-  if(state[SDL_GetScancodeFromKey(SDLK_q)]){
-    dX -= 1;
-  }
-
-  if(state[SDL_GetScancodeFromKey(SDLK_d)]){
-    dX += 1;
-  }
-
-  if(dX == 2 || dX == -2){
-    dX = dX/4;
-  }
-
-  if(dY == 2 || dY == -2){
-    dY = dY/4;
-  }
-
-
-  int res = 0;
-  if(p->pos.x + dX*p->vitesse < 950 && p->pos.x + dX*p->vitesse > 0 && p->pos.y + dY*p->vitesse < 670 && p->pos.y + dY*p->vitesse > 0){
-  for(int i = 0; i < 3; i++){
-        if (p->pos.x + dX*p->vitesse <= tabMur[i].x + tabMur[i].w && p->pos.x + p->pos.w + dX*p->vitesse >= tabMur[i].x && p->pos.y + dY*p->vitesse<= tabMur[i].y + tabMur[i].h
-            && p->pos.h + p->pos.y + dY*p->vitesse >= tabMur[i].y ) {
-             //collision d�tect�e !
-            res = -100;
-
-        }
-        else{
-            res += 1;
-
-        }
-    }
-
-  }
-
-  if(res >= 1){
-        p->pos.x += dX * p->vitesse;
-        p->pos.y += dY * p->vitesse;
-  }
-
-
-}
-
-void angle_joueur(Perso *p, float mouseX, float mouseY){
-  float angle;
-  //float dSourisPerso;
-  angle = atan2(mouseY - (p->pos.y + 30), mouseX - (p->pos.x + 30));
-  //dSourisPerso = sqrt(pow(mouseX - (p->pos.x + 30), 2) + pow(mouseY - (p->pos.y + 30), 2));
-  //angle -= atan(15./dSourisPerso);
-  angle = (angle * 180.0000)/PI;
-  p->angle = angle;
-
-  return;
-}
-
-void animer_perso(Perso *p){
-  p->srcrect.y += 216 * p->animFlip;
-  if(p->srcrect.y > 4104|| p->srcrect.y < 0){
-    p->animFlip = -p->animFlip;
-    p->srcrect.y += 216 * p->animFlip;
-  }
-  return;
-}
-
diff --git a/personnage.h b/personnage.h
index 94d2b72162ffcfa3c31509bb50dea81b43e5cd26..efba9718d1991a2bb0a3c869f8ec04c8480de49d 100644
--- a/personnage.h
+++ b/personnage.h
@@ -1,12 +1,11 @@
-#include <SDL2/SDL.h>
-#include <stdbool.h>
+#include <time.h>
+#include <math.h>
 #include "image.h"
+#include "listeR.h"
+
+#define PI 3.14159265359
+
 
-typedef enum AnimationType Anim;
-enum AnimationType
-{
-    IDLE, MOUVEMENT, TIR, CUT, MORT
-};
 
 typedef struct s_Personnage Perso;
 struct s_Personnage
@@ -21,13 +20,15 @@ struct s_Personnage
   int animFlip;
   bool tir;
   bool ennemi;
-  Anim anim;
 };
 
 
 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, SDL_Rect *tabMur);
+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);
+
diff --git a/projectile.c b/projectile.c
index 7f6404cfba61e534a33be1218f508e0c168680bc..eb2e94c12a4f099595024de2a68a476a6b787c0d 100644
--- a/projectile.c
+++ b/projectile.c
@@ -1,12 +1,6 @@
-#include <SDL2/SDL.h>
-#include <math.h>
-#include <stdlib.h>
 #include "projectile.h"
 
 
-#define PI 3.14159265359
-
-
 balle nouvelle_balle(SDL_Texture *image, float angle, SDL_Rect persoPos)
 {
   balle b;
@@ -20,8 +14,8 @@ balle nouvelle_balle(SDL_Texture *image, float angle, SDL_Rect persoPos)
 //v = vitesse de la balle (provisoire)
 void incrementer_balle(balle *b, int v)
 {
-  b->ballePos.x += (int)(cos(b->angle * PI / 180) * v);
-  b->ballePos.y += (int)(sin(b->angle * PI / 180) * v);
+  b->ballePos.x += round(cos(b->angle * PI / 180) * v);
+  b->ballePos.y += round(sin(b->angle * PI / 180) * v);
 }
 
 
diff --git a/projectile.h b/projectile.h
index 89734240d1a6db567381542b9099e0148c44d2a4..8d1c272b753c2568ad4b9d7e996430a920a3d8bb 100644
--- a/projectile.h
+++ b/projectile.h
@@ -1,5 +1,8 @@
 #include <SDL2/SDL.h>
 #include <stdbool.h>
+#include <math.h>
+#include <stdlib.h>
+#define PI 3.14159265359
 
 typedef struct s_Balle balle, s_Balle;
 struct s_Balle
diff --git a/son/musique.mp3 b/son/musique.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..dc52d260b169213270156c3fe2d8375b8f2dfd66
Binary files /dev/null and b/son/musique.mp3 differ
diff --git a/son/pistolet.flac b/son/pistolet.flac
new file mode 100644
index 0000000000000000000000000000000000000000..cc35a3540ac0feb6d94839f4dc641259ff039915
Binary files /dev/null and b/son/pistolet.flac differ
diff --git a/son/shotgun.mp3 b/son/shotgun.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..55233c7818b4ab4b47d832664f91958daf00c5fe
Binary files /dev/null and b/son/shotgun.mp3 differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_0.png b/sprites/ennemis/zombie/attack/skeleton-attack_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..065cb415e20af639229419ea274e0ef3ffe4982a
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_0.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_1.png b/sprites/ennemis/zombie/attack/skeleton-attack_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..23b33f651d0ccd124e645e4ac87ec207a8f01064
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_1.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_2.png b/sprites/ennemis/zombie/attack/skeleton-attack_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..778fb66f3c5d9d39694da1fc74624ca7ed64454c
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_2.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_3.png b/sprites/ennemis/zombie/attack/skeleton-attack_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee6db3ab2e4d839aa85d0d7da444adfb5684aca1
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_3.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_4.png b/sprites/ennemis/zombie/attack/skeleton-attack_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2006f641aafa76216438f13be79b45c81336582
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_4.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_5.png b/sprites/ennemis/zombie/attack/skeleton-attack_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d3ba16b675ce0bde6ded1a092a092699d8c7547
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_5.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_6.png b/sprites/ennemis/zombie/attack/skeleton-attack_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e0b577a00e8b9361a9c21ad2b1da15a23c4479a
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_6.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_7.png b/sprites/ennemis/zombie/attack/skeleton-attack_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..27494e0fcc8960c057db31ff200889b5a202e52a
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_7.png differ
diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_8.png b/sprites/ennemis/zombie/attack/skeleton-attack_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..065cb415e20af639229419ea274e0ef3ffe4982a
Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_8.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_0.png b/sprites/ennemis/zombie/move/skeleton-move_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..efc5f47c0826f2df567779eeedb3762078f72558
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_0.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_1.png b/sprites/ennemis/zombie/move/skeleton-move_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e32405141468f5601c4d1d26b8af53fa0675a7a2
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_1.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_10.png b/sprites/ennemis/zombie/move/skeleton-move_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..eea6728758c9eb075dfdb8721a22658e654df7eb
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_10.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_11.png b/sprites/ennemis/zombie/move/skeleton-move_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6c4bc4b1866944ac018939851f3de3beb790f7c
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_11.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_12.png b/sprites/ennemis/zombie/move/skeleton-move_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4457c8d0195b200cdd844eb372adc1de8894ce0
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_12.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_13.png b/sprites/ennemis/zombie/move/skeleton-move_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..f0b4860be42ebd33d0a8510e73525c0e38118225
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_13.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_14.png b/sprites/ennemis/zombie/move/skeleton-move_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cd3b8498a7fced2ac1d8d48e2c3858b12b57141
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_14.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_15.png b/sprites/ennemis/zombie/move/skeleton-move_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..c91f5bcdd0c7ed146340f65e6d30aa44c4e45a2f
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_15.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_16.png b/sprites/ennemis/zombie/move/skeleton-move_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..efc5f47c0826f2df567779eeedb3762078f72558
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_16.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_2.png b/sprites/ennemis/zombie/move/skeleton-move_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e386e06ba473cce660ced1430641358a8aeb7d0
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_2.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_3.png b/sprites/ennemis/zombie/move/skeleton-move_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..27f2ad4c4fa51be3620b97636afecff6df989b1e
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_3.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_4.png b/sprites/ennemis/zombie/move/skeleton-move_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..097f77b45d9a8ad9c2aa4cc704b94d6de4bf3e9d
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_4.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_5.png b/sprites/ennemis/zombie/move/skeleton-move_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..85f29dfdcb752e5f0a3cc117564d24a0ba7888db
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_5.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_6.png b/sprites/ennemis/zombie/move/skeleton-move_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f687160e92e7c3c7f8e7dedaf231e69d8c81273
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_6.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_7.png b/sprites/ennemis/zombie/move/skeleton-move_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..80e40f78fb99b48dbe5e7e7f91089d756435fd66
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_7.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_8.png b/sprites/ennemis/zombie/move/skeleton-move_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..03dc64883ff7ea9dfc1ae8ed95bf693134e5825c
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_8.png differ
diff --git a/sprites/ennemis/zombie/move/skeleton-move_9.png b/sprites/ennemis/zombie/move/skeleton-move_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc6713b147c7b6d62d5d27faa45e1c7b1ad36bce
Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_9.png differ
diff --git a/sprites/ennemis/zombie/move/zombie_move.png b/sprites/ennemis/zombie/move/zombie_move.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1b74dccfb6dac76758ed96e730f7f95f68188e5
Binary files /dev/null and b/sprites/ennemis/zombie/move/zombie_move.png differ
diff --git a/sprites/fond.png b/sprites/fond.png
index 44f1c0b6401be531e01b3540393dffffff922622..9be62928bc1a9491e0585b23263c35b0f314dd36 100644
Binary files a/sprites/fond.png and b/sprites/fond.png differ
diff --git a/sprites/map/mur_b.png b/sprites/map/mur_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..551f5fcb4fbe101b5289ee6fbedde95ddbbbfe03
Binary files /dev/null and b/sprites/map/mur_b.png differ
diff --git a/sprites/map/mur_bd.png b/sprites/map/mur_bd.png
new file mode 100644
index 0000000000000000000000000000000000000000..b67445f6b2d589967ea0b94cd444975be35d52fb
Binary files /dev/null and b/sprites/map/mur_bd.png differ
diff --git a/sprites/map/mur_bg.png b/sprites/map/mur_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..d57e9731b1122c2a1d502eb72a66e9a8439b6fb9
Binary files /dev/null and b/sprites/map/mur_bg.png differ
diff --git a/sprites/map/mur_d.png b/sprites/map/mur_d.png
new file mode 100644
index 0000000000000000000000000000000000000000..223435d8236106c90672f7b92532c361c5a5fd05
Binary files /dev/null and b/sprites/map/mur_d.png differ
diff --git a/sprites/map/mur_g.png b/sprites/map/mur_g.png
new file mode 100644
index 0000000000000000000000000000000000000000..55ed72fdb678fda61c4a9ee956a2d5c05c24596b
Binary files /dev/null and b/sprites/map/mur_g.png differ
diff --git a/sprites/map/mur_h.png b/sprites/map/mur_h.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa35d1a5a3699b15caea5a3f827c478beddfd714
Binary files /dev/null and b/sprites/map/mur_h.png differ
diff --git a/sprites/map/mur_hd.png b/sprites/map/mur_hd.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b3193f53622941e4c3e3e6341b7af4204fa5df9
Binary files /dev/null and b/sprites/map/mur_hd.png differ
diff --git a/sprites/map/mur_hg.png b/sprites/map/mur_hg.png
new file mode 100644
index 0000000000000000000000000000000000000000..27cf4037424478e94efb945bb1f0bc848382e992
Binary files /dev/null and b/sprites/map/mur_hg.png differ
diff --git a/sprites/map/sol.png b/sprites/map/sol.png
new file mode 100644
index 0000000000000000000000000000000000000000..babd03d6440a05ce30925278c82e5c9ff98172a8
Binary files /dev/null and b/sprites/map/sol.png differ
diff --git a/sprites/map/sol2.png b/sprites/map/sol2.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfb593f842e0c891c04488c60b5febf1f70552c3
Binary files /dev/null and b/sprites/map/sol2.png differ