diff --git a/travail_de_groupe/chef_oeuvre/chef_oeuvre.odt b/travail_de_groupe/chef_oeuvre/chef_oeuvre.odt
index 77ef2ff06ae6d7eb9e0f79c95727dd094f699c95..be89ba4f6298e709c64f98ccc8d6db6f0d61adb1 100644
Binary files a/travail_de_groupe/chef_oeuvre/chef_oeuvre.odt and b/travail_de_groupe/chef_oeuvre/chef_oeuvre.odt differ
diff --git a/travail_de_groupe/chef_oeuvre/markov.txt b/travail_de_groupe/chef_oeuvre/markov.txt
index dd3380684e771c77605b4c1344704b94bb324981..c4cf89492020cbd533b14d1f8cc37d9b72969f25 100644
--- a/travail_de_groupe/chef_oeuvre/markov.txt
+++ b/travail_de_groupe/chef_oeuvre/markov.txt
@@ -1,4 +1,5 @@
-1 0 0 0
-0 1 0 0
-0 0 1 0
-0 0 0 1
\ No newline at end of file
+1 0 0 0 0
+0 1 0 0 0
+0 0 1 0 0
+0 0 0 1 0
+0 0 0 0 1
\ No newline at end of file
diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c
index b3d7e9797ac3f0418cdd5bb1a718b79b13df913b..9794417cd01364e2e3cf27352f725524c3fd27f3 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,58 @@ 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;}
+
+        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
diff --git a/travail_de_groupe/chef_oeuvre/src/fire.h b/travail_de_groupe/chef_oeuvre/src/fire.h
index 600b839a375340df80a2d9eaed50df00fbf672ce..975fb32c8b02dcf758c617e56c8c41c763961fc3 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.h
+++ b/travail_de_groupe/chef_oeuvre/src/fire.h
@@ -6,13 +6,19 @@
 #include <time.h>
 #include <stdio.h>
 
-#define SIZEMARKOV 4
+#define SIZEMARKOV 5
+#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,9 @@ 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
diff --git a/travail_de_groupe/chef_oeuvre/src/gest_event.c b/travail_de_groupe/chef_oeuvre/src/gest_event.c
index 7ea08e5402d367b665fc24bd8125efb4c354196d..caad8317dca7bb341842856eba8c5e14dff9a70a 100644
--- a/travail_de_groupe/chef_oeuvre/src/gest_event.c
+++ b/travail_de_groupe/chef_oeuvre/src/gest_event.c
@@ -123,10 +123,14 @@ void manageGame(){
                     break;
                 
                 case SDL_MOUSEMOTION:
-                        mousePosition.x = (event.motion.x - (screenDimension.w - (MAPSIZE * CELLSIZE)) / 2) / CELLSIZE;
-                        mousePosition.y = (event.motion.y - 0) / CELLSIZE;
+                    mousePosition.x = (event.motion.x - (screenDimension.w - (MAPSIZE * CELLSIZE)) / 2) / CELLSIZE;
+                    mousePosition.y = (event.motion.y - 0) / CELLSIZE;
                     continue;
 
+                case SDL_MOUSEBUTTONDOWN:
+                    pourWater(mousePosition.x, mousePosition.y);
+                    break;
+
                 default:
                     continue;
             }
diff --git a/travail_de_groupe/chef_oeuvre/src/main.c b/travail_de_groupe/chef_oeuvre/src/main.c
index b6868c9fa9b7b35e119c484f7e75d7fbe5a582fb..2ce91a51061e2f16521276e0e43cc90a0bfd3a93 100644
--- a/travail_de_groupe/chef_oeuvre/src/main.c
+++ b/travail_de_groupe/chef_oeuvre/src/main.c
@@ -8,7 +8,11 @@ int main(){
     running = 1;
     gameState = MENU;
     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/player.c b/travail_de_groupe/chef_oeuvre/src/player.c
index 09106266f5eab936922d592ba96df555976809bd..cc5135b7b723da9287fb87cca4890714b0933639 100644
--- a/travail_de_groupe/chef_oeuvre/src/player.c
+++ b/travail_de_groupe/chef_oeuvre/src/player.c
@@ -4,11 +4,12 @@ player_t player;
 
 
 void initPlayer(){
-    player.x = 18*32;
-    player.y = 0;
+    player.x = (MAPSIZE/2)*CELLSIZE;
+    player.y = (MAPSIZE/2)*CELLSIZE;
     player.w = CELLSIZE*0.8;
     player.h = CELLSIZE*0.8;
-    player.waterLevel = 0;
+    player.waterMax = 3;
+    player.currentWater = player.waterMax;
     player.speed = 1;
     player.isMoving = 0;
 }
@@ -134,5 +135,15 @@ int selectStateHover(){
 }
 
 
+void pourWater(int x, int y){
+    int onFire = searchFire(fireList, x, y);     
+    if(player.currentWater>0){
+        //downgrade the cliqued fire
+        if(onFire == 1 && selectStateHover() == 1){ 
+            fireList = deleteFire (fireList, x, y); 
+        }
+        player.currentWater = player.currentWater - 1;
+    }
+}
 
 
diff --git a/travail_de_groupe/chef_oeuvre/src/player.h b/travail_de_groupe/chef_oeuvre/src/player.h
index 8dda417ec6b48cac57240a0dc79a26c8748e4575..a8bcffb7d67bb15d6dfa6feaa4b19ef23b0a90f1 100644
--- a/travail_de_groupe/chef_oeuvre/src/player.h
+++ b/travail_de_groupe/chef_oeuvre/src/player.h
@@ -14,7 +14,8 @@ typedef struct player{
     int y;
     int w;
     int h;
-    int waterLevel;
+    int currentWater;
+    int waterMax;
     int speed;
     int isMoving;
 } player_t;
@@ -24,5 +25,6 @@ extern player_t player;
 void initPlayer();
 void manageMovement();
 int selectStateHover();
+void pourWater(int, int);
 
 #endif
\ 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 21152dc313053303890a8ac1a1006711708dc857..87092b058f1263dc0fbdb6361561e91f16cd86ad 100644
--- a/travail_de_groupe/chef_oeuvre/src/render.c
+++ b/travail_de_groupe/chef_oeuvre/src/render.c
@@ -167,8 +167,8 @@ void drawFire(){
     srcRect.x = srcRect.w * (SDL_GetTicks()/200 % 8);
     srcRect.y= 0;
     while (cour != NULL){
-        rect.h = CELLSIZE;
-        rect.w = CELLSIZE;
+        rect.h = CELLSIZE * (cour->fire).state;
+        rect.w = CELLSIZE * (cour->fire).state;
         rect.x = (cour->fire).x * CELLSIZE + (screenDimension.w - (MAPSIZE * CELLSIZE)) / 2;
         rect.y = (cour->fire).y * CELLSIZE;
         SDL_RenderCopy(renderer, fireTexture, &srcRect, &rect);
@@ -179,12 +179,12 @@ void drawFire(){
 void drawPlayerWaterLevel(){
     int borderWidth = (screenDimension.w - (MAPSIZE * CELLSIZE)) / 2;
     SDL_Rect rect;
-    rect.h = borderWidth/4;
-    rect.w = borderWidth/4;
-    int count = player.waterLevel;
-    for (int i=0; i<3; i++){
+    rect.h = borderWidth/player.waterMax;
+    rect.w = borderWidth/player.waterMax;
+    int count = player.currentWater;
+    for (int i=0; i<player.waterMax; i++){
         rect.x = (i*rect.h);
-        rect.y = screenDimension.h/4;
+        rect.y = screenDimension.h/3;
         if (count){
             count--;
             SDL_RenderCopy(renderer, filledBucketTexture, NULL, &rect);
@@ -201,6 +201,7 @@ void drawGame(){
     drawMap();
     drawPlayer();
     drawFire();
+    drawPlayerWaterLevel();
     SDL_RenderPresent(renderer);
 }