diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c
index 1ad72f870db3bd0d3c4d43ebbea64531f5a61115..fb0c37d24f942dce9c0614e94e17683e78c4c739 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.c
+++ b/travail_de_groupe/chef_oeuvre/src/fire.c
@@ -31,11 +31,11 @@ listchainfire_t insertAheadFire(fire_t fire,listchainfire_t listFire)
         printf("problème d'allocation \n");
         exit(1);
     }
-    if (!searchFire(listFire,fire.x,fire.y)){
-    m->fire=fire;
-    m->next= listFire;
-    listFire=m;}
-
+    if ((!searchFire(listFire,fire.x,fire.y))&&(map[fire.x][fire.y]!=2)){
+            m->fire=fire;
+            m->next= listFire;
+            listFire=m;
+    }
     return listFire;
 
 }
@@ -55,7 +55,6 @@ listchainfire_t startFire(listchainfire_t listFire,int numberFire, int mapSize){
             xFire= rand()%mapSize;
 
             yFire= rand()%mapSize;
-            //printf("xf:%d,yf:%d\n",xFire,yFire);
             fire.x= xFire;
             fire.y= yFire; 
             fire.state=1;
@@ -135,7 +134,6 @@ void travelFire(listchainfire_t listFire){
         //printf("x:%d,y:%d\n",(listTemporary->fire).x,(listTemporary->fire).y);
         listTemporary=listTemporary->next;
     }
-    //freeListFire(listTemporary);
 }
 
 void readFapFromFile(char * filename){
@@ -185,9 +183,61 @@ void nextFire(listchainfire_t listFire){
         else if ((pMedium<=probability)&&(probability<pStrong)){(listTemporary->fire).state=STRONG;}
         else {(listTemporary->fire).state=SPREAD;}
 
-        //printf("%d %d\n", probability, state);
-        //printf("%d %d %d %d\n", pDead, pSparkle, pMedium, pStrong);
-
         listTemporary=listTemporary->next;   
     }
-} 
\ No newline at end of file
+} 
+
+listchainfire_t probabilitySpreadFire( listchainfire_t listFire, listchainfire_t listTemporary){
+    int probability;
+    fire_t fire; 
+ 
+    probability= rand()%4;
+
+    if((probability==0)&&((listTemporary->fire).x+1<MAPSIZE)){fire.state=1;
+        fire.x=(listTemporary->fire).x+1;
+        fire.y=(listTemporary->fire).y;
+        listFire=insertAheadFire(fire,listFire);
+        }
+    if ((probability==1)&&((listTemporary->fire).y+1<MAPSIZE)){fire.state=1;
+        fire.x=(listTemporary->fire).x;
+        fire.y=(listTemporary->fire).y+1;
+        listFire=insertAheadFire(fire,listFire);
+        }
+    if ((probability==2)&&((listTemporary->fire).y-1>=0)){fire.state=1;
+        fire.x=(listTemporary->fire).x;
+        fire.y=(listTemporary->fire).y-1;
+        listFire=insertAheadFire(fire,listFire);
+        }
+    if ((probability==3)&&((listTemporary->fire).x-1>=0)){fire.state=1;
+        fire.x=(listTemporary->fire).x-1;
+        fire.y=(listTemporary->fire).y;
+        listFire=insertAheadFire(fire,listFire);
+        }
+    return listFire;
+}
+
+listchainfire_t spreadFire (listchainfire_t listFire){
+    listchainfire_t listTemporary=fireList;
+    srand(time(NULL));
+    while (!emptyListFire(listTemporary)){
+        if ((listTemporary->fire).state==4){
+            
+            listFire=probabilitySpreadFire(listFire, listTemporary); 
+        }
+        listTemporary=listTemporary->next; 
+    }
+    return listFire;
+}
+
+booleen_t winGame(listchainfire_t listFire){
+    booleen_t win = true;
+    listchainfire_t listTemporary= listFire; 
+    
+    while (!emptyListFire( listTemporary)){
+        if ((listTemporary->fire).state!=0){
+            win= false;
+            break;
+        }
+    }
+    return win;
+}
\ No newline at end of file
diff --git a/travail_de_groupe/chef_oeuvre/src/fire.h b/travail_de_groupe/chef_oeuvre/src/fire.h
index 84686a86881bd2a07895aea29ca00e907e8b387a..5a41da698c245064c7e0a314b671e9aec4527274 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.h
+++ b/travail_de_groupe/chef_oeuvre/src/fire.h
@@ -13,7 +13,7 @@
 #define STRONG 3
 #define SPREAD 4
 
-#define UPDATETIME 5
+#define UPDATETIME 10
 
 
 typedef struct fire{
@@ -45,9 +45,12 @@ listchainfire_t deleteAheadFire(listchainfire_t);
 listchainfire_t deleteFire (listchainfire_t, int ,int );
 listchainfire_t freeListFire (listchainfire_t );
 listchainfire_t offFire (listchainfire_t, int,int );
-void travelFire(listchainfire_t listFire);
+void travelFire(listchainfire_t );
 void readFapFromFile(char * filename);
 void nextFire(listchainfire_t );
+listchainfire_t probabilitySpreadFire( listchainfire_t, listchainfire_t);
+listchainfire_t spreadFire (listchainfire_t );
+booleen_t winGame(listchainfire_t );
 
 
 
diff --git a/travail_de_groupe/chef_oeuvre/src/main.c b/travail_de_groupe/chef_oeuvre/src/main.c
index 2ce91a51061e2f16521276e0e43cc90a0bfd3a93..71aadadc0fd3ee755877e42fad0e225eb8c4ade0 100644
--- a/travail_de_groupe/chef_oeuvre/src/main.c
+++ b/travail_de_groupe/chef_oeuvre/src/main.c
@@ -10,9 +10,8 @@ int main(){
     readMapFromFile("map.txt");
     readFapFromFile("markov.txt");
     fireList = startFire(fireList,10,MAPSIZE);
-    travelFire(fireList);
-    nextFire(fireList);
     nextFire(fireList);
     nextFire(fireList);
+
     mainLoop();
 } 
\ No newline at end of file
diff --git a/travail_de_groupe/chef_oeuvre/src/render.c b/travail_de_groupe/chef_oeuvre/src/render.c
index bcc85ad59639921ad3dc30517a143c10781e8da1..b633e43b7b8aa4b64aa6db6fcc7ce424accbeae7 100644
--- a/travail_de_groupe/chef_oeuvre/src/render.c
+++ b/travail_de_groupe/chef_oeuvre/src/render.c
@@ -285,7 +285,8 @@ void drawTime(){
     SDL_RenderCopy(renderer, scoreTexture, NULL, &rect);
     rect.y += rect.h;
     char str[10];
-    sprintf(str, "%d", UPDATETIME - (int)timer/1000 % UPDATETIME);
+    printf("%d\n", (UPDATETIME * 1000 - (int)timer % (UPDATETIME * 1000))/1000);
+    sprintf(str, "%d", (UPDATETIME * 1000 - (int)timer % (UPDATETIME * 1000))/1000);
     SDL_Color textColor = {237,222,17};
     SDL_Surface * surface = TTF_RenderText_Solid(robotoFont, str, textColor);
     SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, surface);
@@ -385,16 +386,16 @@ void mainLoop(){
         delta = (a - b);
         if (delta > 1000/FPS_TO_GET){
             timer += delta;
-            //printf("timer : %f\n", timer/1000);
+            printf("%d\n", (int)timer % 1000);
             b = a;
-            //printf("fps : %f", 1000/delta);
             switch (gameState){
                 case MENU:
                     drawMenu();
                     break;
                 case GAME:
-                    if ((int)timer/1000 % UPDATETIME == 0){
+                    if ((int)timer % (UPDATETIME * 1000) < 10){
                         nextFire(fireList);
+                        fireList=spreadFire(fireList);
                     }
                     drawGame();
                     break;