diff --git a/travail_individuel/Belkhiri/GameOfLife/Res/background.png b/travail_individuel/Belkhiri/GameOfLife/Res/background.png
new file mode 100755
index 0000000000000000000000000000000000000000..ce1617d38161087fdac873c90a2511d7c38677f9
Binary files /dev/null and b/travail_individuel/Belkhiri/GameOfLife/Res/background.png differ
diff --git a/travail_individuel/Belkhiri/GameOfLife/map.txt b/travail_individuel/Belkhiri/GameOfLife/map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5858bfb8de8f758990b661cf90de8f3e8d0e4d62
--- /dev/null
+++ b/travail_individuel/Belkhiri/GameOfLife/map.txt
@@ -0,0 +1,20 @@
+0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 
+0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 
+0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 
+0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 
+0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 
+0 0 0 1 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 
+0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 
diff --git a/travail_individuel/Belkhiri/GameOfLife/run b/travail_individuel/Belkhiri/GameOfLife/run
index cc9b9a76df8c962a5b219ba1b0f781bebca3ab35..5091a0fc6309b406237ba71628156f6fa53f0452 100755
Binary files a/travail_individuel/Belkhiri/GameOfLife/run and b/travail_individuel/Belkhiri/GameOfLife/run differ
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c b/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c
index 8b3a2d5894b9d81f214dd27bad46a1caf9cfc43b..a56b164917fbaec04ab02e89c3c1590a31197f91 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c
@@ -39,17 +39,25 @@ void gestGame(){
                     running = 0;
                     break;
                 
-                case SDL_KEYUP:
+                case SDL_KEYDOWN:
                     switch (event.key.keysym.sym)
                     {
                     case SDLK_x:
                         running = 0;
                         continue;
+
+                    case SDLK_RIGHT:
+                        updateMap(map);
+                        continue;
+
+                    case SDLK_s:
+                        writeMap(map, "map.txt");
+                        printf("Saved map to map.txt\n");
                     
                     default:
                         continue;
                     }
-                    break;
+                    continue;
 
                 case SDL_MOUSEBUTTONDOWN:
                     if (event.button.button == SDL_BUTTON_LEFT){
@@ -62,7 +70,7 @@ void gestGame(){
                             map[j][i] = !map[j][i];
                         }
                     }
-                    break;
+                    continue;
 
                 default:
                     continue;
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.c b/travail_individuel/Belkhiri/GameOfLife/src/map.c
index cb922b4765c5aed5624acf3bc05775e9abe57ac7..30a49ee806d1e71c952d8fffb9f1408ab6b8ccca 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.c
@@ -7,7 +7,7 @@ int map[MAPSIZE][MAPSIZE];
 void initMap(int map[MAPSIZE][MAPSIZE]) {
     for(int i = 0; i < MAPSIZE; i++){
         for(int j = 0; j < MAPSIZE; j++){
-            map[i][j] = rand() % 2;
+            map[i][j] = 0;
         }
     }
 }
@@ -20,4 +20,16 @@ void printMap(int map[MAPSIZE][MAPSIZE]){
         }
         printf("\n");
     }
+}
+
+
+void writeMap(int map[MAPSIZE][MAPSIZE], char* filename){
+    FILE* f = fopen(filename, "w");
+    for(int i = 0; i < MAPSIZE; i++){
+        for(int j = 0; j < MAPSIZE; j++){
+            fprintf(f, "%d ", map[i][j]);
+        }
+        fprintf(f, "\n");
+    }
+    fclose(f);
 }
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.h b/travail_individuel/Belkhiri/GameOfLife/src/map.h
index 111b8545fc513e390c2d75b9c9f0fe61dd046b0a..b50040c93b8fa9ebed34986df1a5eaae64590376 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.h
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.h
@@ -8,5 +8,6 @@ extern int map[MAPSIZE][MAPSIZE];
 
 void printMap(int map[MAPSIZE][MAPSIZE]);
 void initMap(int map[MAPSIZE][MAPSIZE]);
+void writeMap(int map[MAPSIZE][MAPSIZE], char* filename);
 
 #endif
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/render.c b/travail_individuel/Belkhiri/GameOfLife/src/render.c
index 9889be58826005c54def13e958b8b02843bfa837..4d5a88bdebd808d7a50f416ee27a81154e8efb0c 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/render.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/render.c
@@ -15,6 +15,9 @@ SDL_Surface * playButtonSurface = NULL;
 SDL_Texture * columnTexture = NULL;
 SDL_Surface * columnSurface = NULL;
 
+SDL_Texture * backgroundTexture = NULL;
+SDL_Surface * backgroundSurface = NULL;
+
 void CreateWindow(){
 
     if (SDL_Init(SDL_INIT_VIDEO) != 0){
@@ -52,6 +55,11 @@ void drawBackground(){
     SDL_RenderFillRect(renderer, &rect);
 }
 
+void drawBackground2(){
+    SDL_Rect rect = {0, 0, ScreenDimension.w, ScreenDimension.h};
+    SDL_RenderCopy(renderer, backgroundTexture, NULL, &rect);
+}
+
 void drawTitle(){
     int titleWidth, titleHeight;
     SDL_QueryTexture(titleTexture, NULL, NULL, &titleWidth, &titleHeight);
@@ -93,7 +101,6 @@ void drawMap(int map[MAPSIZE][MAPSIZE]){
 }
 
 void drawColumns(){
-    // draw 2 columnTexture, 1 left 1 right
     int columnWidth, columnHeight;
     SDL_QueryTexture(columnTexture, NULL, NULL, &columnWidth, &columnHeight);
     int x_offset = ScreenDimension.w/2 - MAPSIZE*CELLSIZE/2;
@@ -106,6 +113,7 @@ void drawColumns(){
 void drawGame(){
     SDL_RenderClear(renderer);
     drawBackground();
+    drawBackground2();
     drawMap(map);
     drawColumns();
     SDL_RenderPresent(renderer);
@@ -117,14 +125,17 @@ void MainLoop(){
     titleSurface = IMG_Load("Res/title.png");
     playButtonSurface = IMG_Load("Res/playButton.png");
     columnSurface = IMG_Load("Res/column.png");
+    backgroundSurface = IMG_Load("Res/background.png");
 
     titleTexture = SDL_CreateTextureFromSurface(renderer, titleSurface);
     playButtonTexture = SDL_CreateTextureFromSurface(renderer, playButtonSurface);
     columnTexture = SDL_CreateTextureFromSurface(renderer, columnSurface);
+    backgroundTexture = SDL_CreateTextureFromSurface(renderer, backgroundSurface);
 
     SDL_FreeSurface(titleSurface);
     SDL_FreeSurface(playButtonSurface);
     SDL_FreeSurface(columnSurface);
+    SDL_FreeSurface(backgroundSurface);
 
     unsigned int a = SDL_GetTicks();
     unsigned int b = SDL_GetTicks();
@@ -140,7 +151,6 @@ void MainLoop(){
         a = SDL_GetTicks();
         delta = (a - b);
         if (delta > 1/FPS_TO_GET){
-            printf("fps : %f\n", 1000/delta);
             b = a;
             switch (game_state){
                 case MENU:
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.c b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0fd5618855756ec723c6f15b952c6effd01ca6d5 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/utility.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
@@ -0,0 +1,39 @@
+#include "utility.h"
+
+int surviveRule[NB_RULES] = {0, 0, 1, 1, 0, 0, 0, 0, 0};
+int bornRule[NB_RULES] = {0, 0, 0, 1, 0, 0, 0, 0, 0};
+
+int survivingNeighbors(int x, int y){
+    int count = 0;
+    for(int i = -1; i <= 1; i++){
+        for(int j = -1; j <= 1; j++){
+            if(i == 0 && j == 0) continue;
+            if(map[(x+i+MAPSIZE)%MAPSIZE][(y+j+MAPSIZE)%MAPSIZE] == 1) count++;
+        }
+    }
+    return count;
+}
+
+
+void updateMap(){
+    int newMap[MAPSIZE][MAPSIZE];
+    for (int i=0; i<MAPSIZE; i++){
+        for (int j=0; j<MAPSIZE; j++){
+            int count = survivingNeighbors(j, i);
+            if (map[j][i] == 1){
+                if (!surviveRule[count]) newMap[j][i] = 0;
+                else newMap[j][i] = 1;
+            }
+            else{
+                if (bornRule[count]) newMap[j][i] = 1;
+                else newMap[j][i] = 0;
+            }
+        }
+    }
+    for (int i=0; i<MAPSIZE; i++){
+        for (int j=0; j<MAPSIZE; j++){
+            map[i][j] = newMap[i][j];
+        }
+    }
+}
+
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.h b/travail_individuel/Belkhiri/GameOfLife/src/utility.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d34b4b4e0f3f0122eec2cb91099b02b0de8dab0 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/utility.h
+++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.h
@@ -0,0 +1,13 @@
+#ifndef _UTILITY_H_
+#define _UTILITY_H_
+
+#include "main.h"
+#include "map.h"
+
+
+#define NB_RULES 9
+
+void updateMap();
+
+
+#endif
\ No newline at end of file