diff --git a/travail_individuel/Belkhiri/snakes/Makefile b/travail_individuel/Belkhiri/snakes/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e76de77896acfdf5d8d8e97b8a1c9504c2364375
--- /dev/null
+++ b/travail_individuel/Belkhiri/snakes/Makefile
@@ -0,0 +1,21 @@
+CC=gcc
+
+LDFLAG=$(shell sdl2-config --cflags --libs) -lm -lSDL2_ttf -D_REENTRANT -lSDL2_image -pthread
+CFLAG=-Wall $(shell sdl2-config --cflags --libs)
+
+EXEC=run
+SRC=$(wildcard *.c)
+OBJ=$(SRC:.c=.o)
+
+all:$(EXEC)
+
+$(EXEC):$(OBJ)
+	$(CC) -o $@ $^ $(LDFLAG)
+
+%.o:%.c
+	$(CC) -o $@ -c $< $(CFLAG)
+
+.PHONY:clean 
+
+clean:
+	rm -rf $(EXEC)
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/snakes/run b/travail_individuel/Belkhiri/snakes/run
new file mode 100755
index 0000000000000000000000000000000000000000..6338c0e03adad271a3f22d17e9e5d4567fb494bd
Binary files /dev/null and b/travail_individuel/Belkhiri/snakes/run differ
diff --git a/travail_individuel/Belkhiri/snakes/snakes.c b/travail_individuel/Belkhiri/snakes/snakes.c
new file mode 100644
index 0000000000000000000000000000000000000000..40cbd7925ddfedbc58cfd95c0b320e495666e078
--- /dev/null
+++ b/travail_individuel/Belkhiri/snakes/snakes.c
@@ -0,0 +1,233 @@
+#include <SDL2/SDL.h>
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#define NB_BLOCS 4
+#define NB_SNAKES 10
+
+typedef struct bloc {
+    int p1[2];
+    int p2[2];
+    int p3[2];
+    int p4[2];
+} bloc_t;
+
+typedef struct snake {
+    bloc_t * blocs[NB_BLOCS];
+} snake_t;
+
+
+int running = 1;
+
+void end_sdl(char ok,                                               
+             char const* msg,                                       
+             SDL_Window* window,                                    
+             SDL_Renderer* renderer) {                              
+  char msg_formated[255];                                                         
+  int l;                                                                          
+
+  if (!ok) {
+    strncpy(msg_formated, msg, 250);                                              
+    l = strlen(msg_formated);                                                     
+    strcpy(msg_formated + l, " : %s\n");                                          
+
+    SDL_Log(msg_formated, SDL_GetError());                                        
+  }                                                                               
+
+  if (renderer != NULL) {
+    SDL_DestroyRenderer(renderer);
+    renderer = NULL;
+  }
+  if (window != NULL)   {
+    SDL_DestroyWindow(window);
+    window= NULL;
+  }
+
+  SDL_Quit();                                                                     
+
+  if (!ok) {      
+    exit(EXIT_FAILURE);                                                           
+  }                                                                               
+}                                                                                 
+
+void draw_snake(SDL_Renderer* renderer, snake_t * Snake_to_draw) {
+    for (int i = 0; i < NB_BLOCS; i++) {
+        SDL_SetRenderDrawColor(renderer, rand() % 255, rand() % 255, rand() % 255, 255);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1], Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1], Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1], Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1], Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1]);
+        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+    }
+}
+
+snake_t * init_snake(int x, int y, int h, int w) {
+    snake_t * snake = malloc(sizeof(snake_t));
+    for (int i = 0; i < NB_BLOCS; i++) {
+        snake->blocs[i] = malloc(sizeof(bloc_t));
+        if (i == 0){
+        snake->blocs[i]->p1[0] = x;
+        snake->blocs[i]->p1[1] = y;
+        snake->blocs[i]->p2[0] = x;
+        snake->blocs[i]->p2[1] = y+h;
+        snake->blocs[i]->p3[0] = x+w;
+        snake->blocs[i]->p3[1] = y+h;
+        snake->blocs[i]->p4[0] = x+w;
+        snake->blocs[i]->p4[1] = y;
+        }
+        else {
+            snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0];
+            snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1];
+            snake->blocs[i]->p2[0] = snake->blocs[i]->p1[0];
+            snake->blocs[i]->p2[1] = snake->blocs[i]->p1[1] + h/(i+2);
+            snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0];
+            snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1];
+            snake->blocs[i]->p3[0] = snake->blocs[i]->p4[0];
+            snake->blocs[i]->p3[1] = snake->blocs[i]->p4[1] + h/(i+2);
+        }
+    }
+    return snake;
+}
+
+void rotate_bloc(float angle, bloc_t * bloc){
+    float x1 = bloc->p1[0];
+    float y1 = bloc->p1[1];
+    float x2 = bloc->p2[0];
+    float y2 = bloc->p2[1];
+    float x3 = bloc->p3[0];
+    float y3 = bloc->p3[1];
+    float x4 = bloc->p4[0];
+    float y4 = bloc->p4[1];
+    // middle is center of rotation
+    float middle_x = (x1 + x4)/2;
+    float middle_y = (y1 + y4)/2;
+
+    float x1_new = x1 - middle_x;
+    float y1_new = y1 - middle_y;
+    float x2_new = x2 - middle_x;
+    float y2_new = y2 - middle_y;
+    float x3_new = x3 - middle_x;
+    float y3_new = y3 - middle_y;
+    float x4_new = x4 - middle_x;
+    float y4_new = y4 - middle_y;
+    // rotate
+    x1_new = x1_new * cos(angle) - y1_new * sin(angle);
+    y1_new = x1_new * sin(angle) + y1_new * cos(angle);
+    x2_new = x2_new * cos(angle) - y2_new * sin(angle);
+    y2_new = x2_new * sin(angle) + y2_new * cos(angle);
+    x3_new = x3_new * cos(angle) - y3_new * sin(angle);
+    y3_new = x3_new * sin(angle) + y3_new * cos(angle);
+    x4_new = x4_new * cos(angle) - y4_new * sin(angle); 
+    y4_new = x4_new * sin(angle) + y4_new * cos(angle);
+    // move back
+    x1_new = x1_new + middle_x;
+    y1_new = y1_new + middle_y;
+    x2_new = x2_new + middle_x;
+    y2_new = y2_new + middle_y;
+    x3_new = x3_new + middle_x;
+    y3_new = y3_new + middle_y;
+    x4_new = x4_new + middle_x;
+    y4_new = y4_new + middle_y;
+    // assign new values
+    bloc->p1[0] = x1_new;
+    bloc->p1[1] = y1_new;
+    bloc->p2[0] = x2_new;
+    bloc->p2[1] = y2_new;
+    bloc->p3[0] = x3_new;
+    bloc->p3[1] = y3_new;
+    bloc->p4[0] = x4_new;
+    bloc->p4[1] = y4_new;
+}
+
+float random_angle_radian() {
+    return (float)rand() / (float)RAND_MAX * 2 * M_PI;
+}
+
+void move_bloc(int x, int y, bloc_t * bloc){
+    bloc->p1[0] += x;
+    bloc->p1[1] += y;
+    bloc->p2[0] += x;
+    bloc->p2[1] += y;
+    bloc->p3[0] += x;
+    bloc->p3[1] += y;
+    bloc->p4[0] += x;
+    bloc->p4[1] += y;
+}
+
+void move_snake(int x, int y, snake_t * snake){
+    for (int i = NB_BLOCS-1; i >= 0; i--) {
+        move_bloc(x, y, snake->blocs[i]);
+    }
+}
+
+void rotate_snake(float angle, snake_t * snake) {
+    for (int i = 0; i < NB_BLOCS; i++) {
+        if (i == 0){
+            rotate_bloc(angle, snake->blocs[i]);
+        }
+        else {
+            rotate_bloc(angle, snake->blocs[i]);
+            snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0];
+            snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1];
+            snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0];
+            snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1];
+        }
+    }
+}
+
+int main(int argc, char** argv) {
+    (void)argc;
+    (void)argv;
+
+  SDL_Window* window = NULL;
+  SDL_Renderer* renderer = NULL;
+
+  SDL_DisplayMode screen;
+
+  /*********************************************************************************************************************/  
+  /*                         Initialisation de la SDL  + gestion de l'échec possible                                   */
+  if (SDL_Init(SDL_INIT_VIDEO) != 0) end_sdl(0, "ERROR SDL INIT", window, renderer);
+
+  SDL_GetCurrentDisplayMode(0, &screen);
+  printf("Résolution écran\n\tw : %d\n\th : %d\n",
+         screen.w, screen.h);
+
+  /* Création de la fenêtre */
+  window = SDL_CreateWindow("Premier dessin",
+                            SDL_WINDOWPOS_CENTERED,
+                            SDL_WINDOWPOS_CENTERED, screen.w,
+                            screen.h,
+                            SDL_WINDOW_OPENGL);
+  if (window == NULL) end_sdl(0, "ERROR WINDOW CREATION", window, renderer);
+
+  /* Création du renderer */
+  renderer = SDL_CreateRenderer(window, -1,
+                                SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
+  if (renderer == NULL) end_sdl(0, "ERROR RENDERER CREATION", window, renderer);
+
+    snake_t * snakeList[NB_SNAKES];
+    for (int i = 0; i < NB_SNAKES; i++) {
+        // random int between 0 and WIDTH
+
+        snakeList[i] = init_snake(rand()%screen.w, rand()%screen.h, rand()%200, rand()%50);
+    }
+
+    for (int i=0; i< 50; i++){
+        for (int j=0; j<NB_SNAKES; j++){
+            float angle = 0.2 * pow(-1, 1 + rand()%2);
+            rotate_snake(angle, snakeList[j]);
+            move_snake(rand()%10, rand()%10, snakeList[j]);
+            draw_snake(renderer, snakeList[j]);            
+        }
+        SDL_RenderPresent(renderer);
+        SDL_Delay(100);
+        SDL_RenderClear(renderer);
+    }
+
+
+
+  /* on referme proprement la SDL */
+  end_sdl(1, "Normal ending", window, renderer);
+  return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/x_fenetre/Makefile b/travail_individuel/Belkhiri/x_fenetre/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e76de77896acfdf5d8d8e97b8a1c9504c2364375
--- /dev/null
+++ b/travail_individuel/Belkhiri/x_fenetre/Makefile
@@ -0,0 +1,21 @@
+CC=gcc
+
+LDFLAG=$(shell sdl2-config --cflags --libs) -lm -lSDL2_ttf -D_REENTRANT -lSDL2_image -pthread
+CFLAG=-Wall $(shell sdl2-config --cflags --libs)
+
+EXEC=run
+SRC=$(wildcard *.c)
+OBJ=$(SRC:.c=.o)
+
+all:$(EXEC)
+
+$(EXEC):$(OBJ)
+	$(CC) -o $@ $^ $(LDFLAG)
+
+%.o:%.c
+	$(CC) -o $@ -c $< $(CFLAG)
+
+.PHONY:clean 
+
+clean:
+	rm -rf $(EXEC)
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/x_fenetre/X.c b/travail_individuel/Belkhiri/x_fenetre/X.c
new file mode 100644
index 0000000000000000000000000000000000000000..2d5a68fbf92fd56439bdb235ff3782c02e99f836
--- /dev/null
+++ b/travail_individuel/Belkhiri/x_fenetre/X.c
@@ -0,0 +1,100 @@
+#include <SDL2/SDL.h>
+#include <stdio.h>
+
+
+int main(int argc, char **argv) {
+    (void)argc;
+    (void)argv;
+
+    int screen_width = 1079;
+    int screen_height = 1920;
+
+    SDL_Window * windows[20];
+
+    int bounce_count = 0;
+    int amplitude_bounce = 200;
+    int left_most_position = 0;
+    int top_most_position = 0;
+
+    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
+    SDL_Log("Error : SDL initialisation - %s\n", 
+             SDL_GetError());
+    exit(EXIT_FAILURE);
+    }
+        int pas_y = (screen_height)/20;
+        int pas_x = (screen_width)/20;
+        int last_drawy = 0;
+
+    for  (int i = 0; i < 10; i++) {
+        int draw_x = top_most_position + i * pas_x;
+        int draw_y = left_most_position + i * pas_y;
+        last_drawy = draw_y;
+        windows[i] = SDL_CreateWindow("Window",
+                                        draw_y , draw_x,  
+                                        400, 300,
+                                        SDL_WINDOW_SHOWN);
+        if (windows[i] == NULL) {
+                SDL_Log("Error : SDL window creation - %s\n", 
+                        SDL_GetError());
+                exit(EXIT_FAILURE);
+        }
+        SDL_Delay(50);
+    }
+
+    for  (int i = 10; i < 20; i++) {
+        int draw_x = top_most_position + (i-10) * pas_x;
+        int draw_y = last_drawy - (i-10) * pas_y;
+        windows[i] = SDL_CreateWindow("Window",
+                                    draw_y , draw_x,  
+                                    400, 300,
+                                    SDL_WINDOW_SHOWN);
+        if (windows[i] == NULL) {
+            SDL_Log("Error : SDL window creation - %s\n", 
+                    SDL_GetError());
+            exit(EXIT_FAILURE);
+        }
+        SDL_Delay(50);
+    }
+
+    SDL_Delay(100);
+
+    while (bounce_count < 50) {
+
+    
+        for  (int i = 0; i < 10; i++) {
+            int draw_x = top_most_position + i * pas_x;
+            int draw_y = left_most_position + i * pas_y;
+            last_drawy = draw_y;
+            SDL_SetWindowPosition(windows[i],
+                                draw_y , draw_x);
+
+            //SDL_Delay(50);
+        }
+
+        for  (int i = 10; i < 20; i++) {
+            int draw_x = top_most_position + (i-10) * pas_x;
+            int draw_y = last_drawy - (i-10) * pas_y;
+            SDL_SetWindowPosition(windows[i],
+                                        draw_y , draw_x);
+            //SDL_Delay(50);
+        }
+
+        SDL_Delay(100);
+
+
+        bounce_count+=1;
+        int signe = (bounce_count % 2 == 0) ? (1) : (-1);
+        left_most_position = left_most_position + amplitude_bounce;
+        amplitude_bounce = 200 * sin(bounce_count);
+    }
+    for (int i = 0; i < 20; i++) {
+        SDL_DestroyWindow(windows[i]);
+    }
+
+
+    SDL_Delay(2000);
+
+    SDL_Quit();
+
+      return 0;
+}
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/x_fenetre/run b/travail_individuel/Belkhiri/x_fenetre/run
new file mode 100755
index 0000000000000000000000000000000000000000..64084e4825d6614c016394579ef63b7ad36a1453
Binary files /dev/null and b/travail_individuel/Belkhiri/x_fenetre/run differ