diff --git a/travail_de_groupe/chef_oeuvre/Res/wonScreen.png b/travail_de_groupe/chef_oeuvre/Res/wonScreen.png
new file mode 100755
index 0000000000000000000000000000000000000000..c5159ef181c86500f845478a621bc28d85805d58
Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/wonScreen.png differ
diff --git a/travail_de_groupe/chef_oeuvre/markov.txt b/travail_de_groupe/chef_oeuvre/markov.txt
index 5b15740472e2aafbb138e4f7059dd4bb68924f67..4c18679d32b93424c3e4f46eebd8ecb1a43df08a 100644
--- a/travail_de_groupe/chef_oeuvre/markov.txt
+++ b/travail_de_groupe/chef_oeuvre/markov.txt
@@ -2,4 +2,4 @@
 0 60 40 0 0
 0 10 70 20 0
 0 0 10 50 40
-0 0 0 50 50
\ No newline at end of file
+0 0 0 50 50
diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c
index 08b6a2fb755f6fe754c0e4dba738f30728e002a7..ce1f573300e208a21c4040ac130f3d43ef1ba8e0 100644
--- a/travail_de_groupe/chef_oeuvre/src/fire.c
+++ b/travail_de_groupe/chef_oeuvre/src/fire.c
@@ -36,6 +36,9 @@ listchainfire_t insertAheadFire(fire_t fire,listchainfire_t listFire)
             m->next= listFire;
             listFire=m;
     }
+    else {
+        free(m);
+    }
     return listFire;
 
 }
@@ -57,7 +60,7 @@ listchainfire_t startFire(listchainfire_t listFire,int numberFire, int mapSize){
             yFire= rand()%mapSize;
             fire.x= xFire;
             fire.y= yFire; 
-            fire.state=1;
+            fire.state=2;
 
             listFire=insertAheadFire(fire, listFire); 
             
@@ -217,8 +220,19 @@ listchainfire_t probabilitySpreadFire( listchainfire_t listFire, listchainfire_t
     return listFire;
 }
 
+void burnTree (listchainfire_t listFire){
+    listchainfire_t listTemporary = listFire; 
+
+    while (!emptyListFire(listTemporary)){
+        if (map[(listTemporary->fire).y][(listTemporary->fire).x]==TREE){map[(listTemporary->fire).y][(listTemporary->fire).x]=0;}
+    }
+}
+
 listchainfire_t spreadFire (listchainfire_t listFire){
     listchainfire_t listTemporary=fireList;
+    
+    //burnTree(listFire);
+
     srand(time(NULL));
     while (!emptyListFire(listTemporary)){
         if ((listTemporary->fire).state==4){
@@ -232,13 +246,8 @@ listchainfire_t spreadFire (listchainfire_t listFire){
 
 booleen_t winGame(listchainfire_t listFire){
     booleen_t win = true;
-    listchainfire_t listTemporary= listFire; 
+
+    if(!emptyListFire(listFire)){win=false;}
     
-    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 0284cedffa35689e462c662c6493532d8e1dd92b..125c761db9d63acd407f71b8c87b0cb8bc7b3761 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 3
 
 
 typedef struct fire{
@@ -51,6 +51,7 @@ void nextFire(listchainfire_t );
 listchainfire_t probabilitySpreadFire( listchainfire_t, listchainfire_t);
 listchainfire_t spreadFire (listchainfire_t );
 booleen_t winGame(listchainfire_t );
+void burnTree (listchainfire_t listFire);
 
 
 
diff --git a/travail_de_groupe/chef_oeuvre/src/gest_event.c b/travail_de_groupe/chef_oeuvre/src/gest_event.c
index cfaf1e2cc7323edc1ec1539138139c8c0f80aa61..6174f178dc61534cae30d5a00b0ffcf1b05e454c 100644
--- a/travail_de_groupe/chef_oeuvre/src/gest_event.c
+++ b/travail_de_groupe/chef_oeuvre/src/gest_event.c
@@ -203,6 +203,7 @@ void manageGame(){
             }
     }
     updatePlayer();
+    //burnTree(fireList);
     SDL_Delay(5);
 }
 
@@ -212,6 +213,7 @@ void *eventLoop(void *arg){
             case MENU : manageMenu();break;
             case GAME : manageGame();break;
             case LOSE : manageLost();break;
+            case WON : manageLost();break;
             default:printf("game state fault");break;
         }
     }
diff --git a/travail_de_groupe/chef_oeuvre/src/main.h b/travail_de_groupe/chef_oeuvre/src/main.h
index 3604248fe8252e88ac6148f5c29f5e03f17cfe1c..b352d3833f8f83dc08e9875d981e8252a5dff85a 100644
--- a/travail_de_groupe/chef_oeuvre/src/main.h
+++ b/travail_de_groupe/chef_oeuvre/src/main.h
@@ -24,6 +24,7 @@
 #define MENU 0
 #define GAME 1
 #define LOSE 2
+#define WON 3
 
 extern int running;
 extern int gameState;
diff --git a/travail_de_groupe/chef_oeuvre/src/render.c b/travail_de_groupe/chef_oeuvre/src/render.c
index ad055c9aa9e5a15d8e477a2d4d14a08092bdf65f..f8facc890762b2fb7518567a71171a9f3af29858 100644
--- a/travail_de_groupe/chef_oeuvre/src/render.c
+++ b/travail_de_groupe/chef_oeuvre/src/render.c
@@ -1,6 +1,7 @@
 #include "render.h"
 
 float timer = 0;
+int fps;
 
 SDL_Window *window;
 SDL_Renderer *renderer;
@@ -78,6 +79,9 @@ SDL_Texture * scoreTexture;
 SDL_Surface * nextFireSurface;
 SDL_Texture * nextFireTexture;
 
+SDL_Surface * backgroundWonSurface;
+SDL_Texture * backgroundWonTexture;
+
 void createWindow(){
 
     if (SDL_Init(SDL_INIT_VIDEO) != 0){
@@ -110,6 +114,40 @@ void createWindow(){
 
 }
 
+void endSDL(){
+    SDL_DestroyTexture(grassTexture);
+    SDL_DestroyTexture(treeTexture);
+    SDL_DestroyTexture(hoverTexture);
+    SDL_DestroyTexture(noHoverTexture);
+    SDL_DestroyTexture(playerTexture);
+    SDL_DestroyTexture(playerIdleTexture);
+    SDL_DestroyTexture(backgroundTexture);
+    SDL_DestroyTexture(backgroundSidesTexture);
+    SDL_DestroyTexture(backgroundLostTexture);
+    SDL_DestroyTexture(playButtonTexture);
+    SDL_DestroyTexture(playButtonHoverTexture);
+    SDL_DestroyTexture(playAgainButtonTexture);
+    SDL_DestroyTexture(playAgainButtonHoverTexture);
+    SDL_DestroyTexture(quitButtonTexture);
+    SDL_DestroyTexture(quitButtonHoverTexture);
+    SDL_DestroyTexture(fireTexture);
+    SDL_DestroyTexture(waterTexture);
+    SDL_DestroyTexture(emptyBucketTexture);
+    SDL_DestroyTexture(filledBucketTexture);
+    SDL_DestroyTexture(heartTexture);
+    SDL_DestroyTexture(scoreTexture);
+    SDL_DestroyTexture(nextFireTexture);
+    SDL_DestroyTexture(backgroundWonTexture);
+    SDL_DestroyRenderer(renderer);
+    SDL_DestroyWindow(window);
+    TTF_CloseFont(robotoFont);
+    TTF_Quit();
+    SDL_Quit();
+    if (!fireList){
+        fireList = freeListFire(fireList);
+    }
+}
+
 void drawBackground(){
     SDL_Rect rect = {0, 0, screenDimension.w, screenDimension.h};
     SDL_RenderCopy(renderer, backgroundTexture, NULL, &rect);
@@ -318,7 +356,7 @@ void drawTime(){
     SDL_RenderCopy(renderer, nextFireTexture, NULL, &rect);
     rect.y += rect.h;
     char str[10];
-    printf("%d\n", (UPDATETIME * 1000 - (int)timer % (UPDATETIME * 1000))/1000);
+    //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);
@@ -326,6 +364,21 @@ void drawTime(){
     SDL_RenderCopy(renderer, texture, NULL, &rect);    
 }
 
+void drawFPS(){
+    SDL_Rect rect;
+    rect.h = screenDimension.h/12;
+    rect.w = screenDimension.w/12;
+    rect.x = (screenDimension.w + (MAPSIZE * CELLSIZE)) / 2;
+    rect.y = screenDimension.h - rect.h;
+
+    char str[10];
+    sprintf(str, "%d", fps);
+    SDL_Color textColor = {237,222,17};
+    SDL_Surface * surface = TTF_RenderText_Solid(robotoFont, str, textColor);
+    SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, surface);
+    SDL_RenderCopy(renderer, texture, NULL, &rect); 
+}
+
 void drawGame(){
     SDL_RenderClear(renderer);
     drawBackgroundSides();
@@ -336,6 +389,7 @@ void drawGame(){
     drawPlayerHP();
     drawScore();
     drawTime();
+    drawFPS();
     SDL_RenderPresent(renderer);
 }
 
@@ -351,6 +405,31 @@ void drawLost(){
     SDL_RenderCopy(renderer, quitButtonHoverTexture, NULL, &rect);
     SDL_RenderCopy(renderer, playAgainButtonHoverTexture, NULL, &rect);
     SDL_RenderPresent(renderer);
+
+    // draw score
+    rect.h = screenDimension.h/12;
+    rect.w = rect.h;
+    rect.x = screenDimension.w/2;
+    rect.y = screenDimension.h/2 - rect.h;
+    char str[10];
+    sprintf(str, "%d", player.score);
+    SDL_Color textColor = {237,222,17};
+    SDL_Surface * surface = TTF_RenderText_Solid(robotoFont, str, textColor);
+    SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, surface);
+    SDL_RenderCopy(renderer, texture, NULL, &rect);
+}
+
+void drawWon(){
+    SDL_Rect rect;
+    rect.h = screenDimension.h;
+    rect.w = screenDimension.w;
+    rect.x = 0;
+    rect.y = 0;
+    SDL_RenderCopy(renderer, backgroundWonTexture, NULL, &rect);
+    SDL_RenderCopy(renderer, playAgainButtonHoverTexture, NULL, &rect);
+    SDL_RenderCopy(renderer, quitButtonHoverTexture, NULL, &rect);
+    SDL_RenderCopy(renderer, playAgainButtonHoverTexture, NULL, &rect);
+    SDL_RenderPresent(renderer);
 }
 
 void mainLoop(){
@@ -423,7 +502,8 @@ void mainLoop(){
     heartSurface = IMG_Load("Res/heart_spritesheet.png");
     heartTexture = SDL_CreateTextureFromSurface(renderer, heartSurface);
     
-
+    backgroundWonSurface = IMG_Load("Res/wonScreen.png");
+    backgroundWonTexture = SDL_CreateTextureFromSurface(renderer, backgroundWonSurface);
 
     SDL_FreeSurface(grassSurface);
     SDL_FreeSurface(treeSurface);
@@ -445,6 +525,7 @@ void mainLoop(){
     SDL_FreeSurface(quitButtonHoverSurface);
     SDL_FreeSurface(playAgainButtonHoverSurface);
     SDL_FreeSurface(heartSurface);
+    SDL_FreeSurface(backgroundWonSurface);
 
     playAgainButtonRect.x = (screenDimension.w * 700)/1920;
     playAgainButtonRect.y = (screenDimension.h * 615)/1080;
@@ -470,8 +551,9 @@ void mainLoop(){
         a = SDL_GetTicks();
         delta = (a - b);
         if (delta > 1000/FPS_TO_GET){
+            fps = 1000/delta;
             timer += delta;
-            printf("%d\n", (int)timer % 1000);
+            //printf("%d\n", (int)timer % 1000);
             b = a;
             switch (gameState){
                 case MENU:
@@ -484,17 +566,24 @@ void mainLoop(){
                     }
                     //updateMap();
                     drawGame();
+                    if (fireList == NULL){
+                        gameState = WON;
+                    }
                     break;
 
                 case LOSE:
                     drawLost();
                     break;
+
+                case WON:
+                    drawWon();
+                    break;
             }
         }
         else {
             // fait dormir le thread pour garder des ressources
             usleep(1000 * (1000/FPS_TO_GET - delta));
         }
-
     }
+    endSDL();
 } 
\ No newline at end of file