diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c
index b3d7e9797ac3f0418cdd5bb1a718b79b13df913b..8d30ea4d79e25ae10781a761ec0a1e30f639d42b 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.c
+++ b/travail_de_groupe/chef_oeuvre/src/fire.c
@@ -74,11 +74,11 @@ booleen_t searchFire(listchainfire_t listFire, int x ,int y)
 
     while((listFire!=NULL)&&!(result))
     {  
-        if(((listFire->fire).x==x)&&((listFire->fire).y==y)) // si on trouve la semaine voulue
+        if(((listFire->fire).x==x)&&((listFire->fire).y==y)) 
         {
-            result= true ;// on chercher si on trouve l'action ou non.
+            result= true ;
         }
-        listFire=listFire->next; // on passe au suivant.
+        listFire=listFire->next; 
     }
     return result;
 }
@@ -87,9 +87,9 @@ listchainfire_t deleteAheadFire(listchainfire_t listFire){
 
     listchainfire_t listTemporary; 
     
-    listTemporary = listFire; // recuperation de la semaine en tête de liste
-    listFire = listFire->next; // on avance la liste sur le maillon suivant
-    free(listTemporary); // on libere le maillon en tete
+    listTemporary = listFire; 
+    listFire = listFire->next; 
+    free(listTemporary); 
     return listFire;
 }
 
@@ -120,7 +120,7 @@ listchainfire_t offFire (listchainfire_t listFire, int x ,int y ){
         return(listFire);
     }
     if(((listFire->fire).x==x)&&((listFire->fire).y==y)) {
-        (listFire->fire).state=0; // feu eteint
+        (listFire->fire).state=(listFire->fire).state-1;
     }
     else{
         listFire->next=offFire(listFire->next,x,y);
@@ -136,4 +136,55 @@ void travelFire(listchainfire_t listFire){
         listTemporary=listTemporary->next;
     }
     //freeListFire(listTemporary);
-}
\ No newline at end of file
+}
+
+void readFapFromFile(char * filename){
+    FILE * fp;
+    int i, j;
+    fp = fopen(filename, "r");
+    if(fp == NULL){
+        printf("Error opening file\n");
+        exit(1);
+    }
+    for(i = 0; i < SIZEMARKOV; i++){
+        for(j = 0; j < SIZEMARKOV; j++){
+            fscanf(fp, "%d", &markov[i][j]);
+        }
+    }
+    fclose(fp);
+}
+
+void nextFire(listchainfire_t listFire){
+    int probability; 
+    int state;
+    int pDead;
+    int pSparkle;
+    int pMedium;
+    int pStrong;
+    listchainfire_t listTemporary; 
+
+    listTemporary= listFire;
+    srand(time(NULL));
+
+    while (!emptyListFire(listTemporary)){
+        state=(listTemporary->fire).state;
+        probability= rand()%101;
+
+        pDead=markov[state][DEAD]*100;
+        pSparkle=(markov[state][SPARKLE]+markov[state][DEAD])*100;
+
+        pMedium=(markov[state][SPARKLE]+markov[state][DEAD]+markov[state][MEDIUM])*100;
+
+        pStrong=(markov[state][SPARKLE]+markov[state][DEAD]+
+                    markov[state][MEDIUM]+markov[state][STRONG])*100;
+
+
+        if ((0<=probability)&&(probability<pDead)){(listTemporary->fire).state=DEAD;}
+        else if ((pDead<=probability)&&(probability<pSparkle)){(listTemporary->fire).state=SPARKLE;}
+        else if ((pSparkle<=probability)&&(probability<pMedium)){(listTemporary->fire).state=MEDIUM;}
+        else if ((pMedium<=probability)&&(probability<pStrong)){(listTemporary->fire).state=STRONG;}
+        else {(listTemporary->fire).state=SPREAD;}
+
+        listTemporary=listTemporary->next;   
+    }
+} 
\ 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 600b839a375340df80a2d9eaed50df00fbf672ce..510c4b291093d5e8b9e79df74c5442dda06fb8ff 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.h
+++ b/travail_de_groupe/chef_oeuvre/src/fire.h
@@ -7,12 +7,18 @@
 #include <stdio.h>
 
 #define SIZEMARKOV 4
+#define DEAD 0
+#define SPARKLE 1
+#define MEDIUM 2
+#define STRONG 3
+#define SPREAD 4
+
 
 
 typedef struct fire{
     int x;
     int y; 
-    int state; // { dead 0 ;sarkle 1 ; medium_fire 2 ; strong_fire 3}
+    int state; // { dead 0 ;sarkle 1 ; medium_fire 2 ; strong_fire 3; preading 4}
 
 }fire_t;
 
@@ -39,5 +45,8 @@ 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 readFapFromFile(char * filename);
+void nextFire(listchainfire_t );
+
 
 #endif
\ No newline at end of file