diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..d564005163a46bf1edd682ba7c60988b3598e3e4
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,7 @@
+{
+    "files.associations": {
+        "sdl2-light.h": "c",
+        "world.h": "c",
+        "display.h": "c"
+    }
+}
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 1add66b926038fe7544211eb47363dae5cdfe054..74d11f05f1628b2f348f6cffd38ac49d930335c1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,17 @@
-CFLAGS =  -O3 -Dmain=SDL_main
+CFLAGS = -O3 -Dmain=SDL_main
 LDFLAGS = -lm -lmingw32 -lSDL2main -lSDL2
 SDL2_INCLUDE_DIR = src/include
 SDL2_LIBRARIES_DIR = src/lib
 
-INC = sdl2-light.h
-SRC = main.c sdl2-light.c
+INC = sdl2-light.h library/Display/Display.h library/World/world.h
+SRC = main.c sdl2-light.c library/Display/Display.c library/World/world.c
+
 OBJ = $(SRC:%.c=%.o)
 
 PROG = spacecorridor.exe
 
 %.o: %.c $(INC)
-	gcc $(CFLAGS) -c $<  -I $(SDL2_INCLUDE_DIR)
+	gcc $(CFLAGS) -c $< -I $(SDL2_INCLUDE_DIR) -o $@
 
 $(PROG): $(OBJ)
 	gcc $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@ -L $(SDL2_LIBRARIES_DIR)
@@ -21,4 +22,4 @@ doc: $(PROG)
 .PHONY: clean
 clean:
 	del /f /q *.o *~ $(PROG)
-	rd /s /q latex html
+	rd /s /q latex html
\ No newline at end of file
diff --git a/constante.c b/constante.c
new file mode 100644
index 0000000000000000000000000000000000000000..bd2ee450ee5967343de2dc532fcf42ec07e493b8
--- /dev/null
+++ b/constante.c
@@ -0,0 +1,45 @@
+/**
+ * \brief Largeur de l'écran de jeu
+ */
+#define SCREEN_WIDTH 300
+
+/**
+ * \brief Hauteur de l'écran de jeu
+ */
+#define SCREEN_HEIGHT 480
+
+
+/**
+ * \brief Taille d'un vaisseau
+ */
+
+#define SHIP_SIZE 32
+
+
+/**
+ * \brief Taille d'un météorite
+*/
+
+#define METEORITE_SIZE 32
+
+
+/**
+ * \brief Hauteur de la ligne d'arrivée
+ */
+
+
+#define FINISH_LINE_HEIGHT 10
+
+
+/**
+ * \brief Pas de déplacement horizontal du vaisseau
+*/
+
+#define MOVING_STEP 10
+
+
+/**
+  * \brief Vitesse initiale de déplacement vertical des éléments du jeu 
+*/
+
+#define INITIAL_SPEED 2
\ No newline at end of file
diff --git a/library/Display/Display.c b/library/Display/Display.c
new file mode 100644
index 0000000000000000000000000000000000000000..4b0a4c760017f5a32bf1dd65176476aa063e7c27
--- /dev/null
+++ b/library/Display/Display.c
@@ -0,0 +1,75 @@
+#include "Display.h"
+#include "../../constante.c"
+
+void init_textures(SDL_Renderer *renderer, textures_t *textures){
+    textures->background = load_image( "ressources/space-background.bmp",renderer);
+    textures->ship = load_image( "ressources/spaceship.bmp",renderer);
+    textures->meteorite = load_image( "ressources/meteorite.bmp",renderer);
+    textures->finishLine = load_image( "ressources/finish_line.bmp",renderer);
+}
+
+void apply_background(SDL_Renderer *renderer, SDL_Texture *texture){
+    if(texture != NULL){
+      apply_texture(texture, renderer, 0, 0);
+    }
+}
+
+void apply_sprite(SDL_Renderer * renderer, SDL_Texture *texture, sprite_t *sprite){
+    if(texture != NULL){
+        SDL_Rect rect;
+        rect.x = sprite->x;
+        rect.y = sprite->y;
+        rect.w = sprite->w;
+        rect.h = sprite->h;
+        SDL_RenderCopy(renderer, texture, NULL, &rect);
+    }
+}
+
+void apply_wall(SDL_Renderer * renderer, SDL_Texture *texture, int x, int y){
+    if(texture != NULL){
+        SDL_Rect rect;
+        rect.x = x;
+        rect.y = y;
+        rect.w = METEORITE_SIZE;
+        rect.h = METEORITE_SIZE;
+        SDL_RenderCopy(renderer, texture, NULL, &rect);
+    }
+}
+
+
+void refresh_graphics(SDL_Renderer *renderer, world_t *world,textures_t *textures){
+
+    //on vide le renderer
+    clear_renderer(renderer);
+    
+    //application des textures dans le renderer
+    apply_background(renderer, textures->background);
+    /* A COMPLETER */
+    apply_sprite(renderer, textures->ship, world->vaisseau);
+
+    apply_sprite(renderer, textures->finishLine, world->ligneArriver);
+
+    for (int i = 0; i < world->mur->w/METEORITE_SIZE ; i++){
+        for (int i2 = 0; i2 < world->mur->h/METEORITE_SIZE ; i2++){
+            apply_wall(renderer, textures->meteorite, world->mur->x+i*METEORITE_SIZE, world->mur->y+i2*METEORITE_SIZE);
+        }
+    }
+    
+
+    // on met à jour l'écran
+    update_screen(renderer);
+}
+
+
+void clean(SDL_Window *window, SDL_Renderer * renderer, textures_t *textures, world_t * world){
+    clean_data(world);
+    clean_textures(textures);
+    clean_sdl(renderer,window);
+}
+
+void clean_textures(textures_t *textures){
+    SDL_DestroyTexture(textures->background);
+    SDL_DestroyTexture(textures->ship);
+    SDL_DestroyTexture(textures->meteorite);
+    SDL_DestroyTexture(textures->finishLine);
+}
\ No newline at end of file
diff --git a/library/Display/Display.h b/library/Display/Display.h
new file mode 100644
index 0000000000000000000000000000000000000000..b47d3d8180bbbf1f34a06f17aec4f1882ab60c35
--- /dev/null
+++ b/library/Display/Display.h
@@ -0,0 +1,79 @@
+#include "../../sdl2-light.h"
+#include "../World/world.h"
+#include "../../constante.c"
+
+#ifndef DISPLAY_H
+#define DISPLAY_H
+/**
+ * \brief Représentation pour stocker les textures nécessaires à l'affichage graphique
+*/
+
+struct textures_s{
+    SDL_Texture* background; /*!< Texture liée à l'image du fond de l'écran. */
+    SDL_Texture* ship; /*!< Texture liée à l'image du vaisseau. */
+    SDL_Texture* meteorite; /*!< Texture liée à l'image du météorite. */
+    SDL_Texture* finishLine; /*!< Texture liée à l'image de la ligne d'arrivée. */
+    /* A COMPLETER */
+};
+
+/**
+ * \brief Type qui correspond aux textures du jeu
+*/
+
+typedef struct textures_s textures_t;
+
+void init_textures(SDL_Renderer *renderer, textures_t *textures);
+
+/**
+ * \brief La fonction applique la texture du fond sur le renderer lié à l'écran de jeu
+ * \param renderer le renderer
+ * \param texture la texture liée au fond
+*/
+void apply_background(SDL_Renderer *renderer, SDL_Texture *texture);
+
+/**
+ * \brief La fonction qui applique la texture \a texture sur le renderer \a renderer en fonction des données du sprite \a sprite
+ * 
+ * \param texture
+ * \param renderer 
+ * \param sprite 
+ */
+void apply_sprite(SDL_Renderer * renderer, SDL_Texture *texture, sprite_t *sprite);
+
+/**
+ * \brief La fonction qui applique la texture \a texture sur le renderer \a renderer en fonction des coordonnées \a x et \a y
+ * 
+ * \param renderer 
+ * \param texture 
+ * \param x 
+ * \param y 
+ */
+void apply_wall(SDL_Renderer * renderer, SDL_Texture *texture, int x, int y);
+
+
+/**
+ * \brief La fonction rafraichit l'écran en fonction de l'état des données du monde
+ * \param renderer le renderer lié à l'écran de jeu
+ * \param world les données du monde
+ * \param textures les textures
+ */
+void refresh_graphics(SDL_Renderer *renderer, world_t *world,textures_t *textures);
+
+/**
+ * \brief La fonction nettoie les textures
+ * \param textures les textures
+*/
+
+void clean_textures(textures_t *textures);
+
+/**
+* \brief fonction qui nettoie le jeu: nettoyage de la partie graphique (SDL), nettoyage des textures, nettoyage des données
+* \param window la fenêtre du jeu
+* \param renderer le renderer
+* \param textures les textures
+* \param world le monde
+*/
+
+void clean(SDL_Window *window, SDL_Renderer * renderer, textures_t *textures, world_t * world);
+
+#endif
\ No newline at end of file
diff --git a/library/Display/Display.o b/library/Display/Display.o
new file mode 100644
index 0000000000000000000000000000000000000000..0aa5943d43618e3d783f6253bdcc9e0a6864a7be
Binary files /dev/null and b/library/Display/Display.o differ
diff --git a/library/World/world.c b/library/World/world.c
new file mode 100644
index 0000000000000000000000000000000000000000..041ecc434271583ac25ca335de3f0c6c552de8ed
--- /dev/null
+++ b/library/World/world.c
@@ -0,0 +1,77 @@
+#include "world.h"
+
+/**
+ * \brief La fonction met à jour les données en tenant compte de la physique du monde
+ * \param les données du monde
+ */
+
+void update_data(world_t *world){
+    world->ligneArriver->y += INITIAL_SPEED - world->speed_h;
+    world->mur->y += INITIAL_SPEED - world->speed_h;
+}
+
+/**
+ * \brief La fonction indique si le jeu est fini en fonction des données du monde
+ * \param world les données du monde
+ * \return 1 si le jeu est fini, 0 sinon
+ */
+
+int is_game_over(world_t *world){
+    return world->gameover;
+}
+
+void print_sprite(sprite_t *sprite){
+    printf("x = %d, y = %d, w = %d, h = %d\n", sprite->x, sprite->y, sprite->w, sprite->h);
+}
+
+/**
+ * \brief La fonction initialise les sprites du jeu
+ * 
+ * \param sprite 
+ * \param x 
+ * \param y 
+ * \param w 
+ * \param h 
+ */
+sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h){
+    sprite = malloc(sizeof(sprite_t));
+    sprite->x = x;
+    sprite->y = y;
+    sprite->w = w;
+    sprite->h = h;
+    return sprite;
+}
+
+/**
+ * \brief La fonction initialise les données du monde du jeu
+ * \param world les données du monde
+ */
+
+
+void init_data(world_t * world){
+    
+    //on n'est pas à la fin du jeu
+    world->gameover = 0;
+    world->speed_h = 0;
+
+    // Initialisation du vaisseau
+    world->vaisseau = init_sprite(world->vaisseau, SCREEN_WIDTH/2 - SHIP_SIZE/2, SCREEN_HEIGHT - SHIP_SIZE, SHIP_SIZE, SHIP_SIZE);
+    world->mur = init_sprite(world->mur, 0, 0, 3*METEORITE_SIZE, 7*METEORITE_SIZE);
+    world->ligneArriver = init_sprite(world->ligneArriver, 0, -40, SCREEN_WIDTH, FINISH_LINE_HEIGHT);
+
+    print_sprite(world->vaisseau);
+}
+
+
+/**
+ * \brief La fonction nettoie les données du monde
+ * \param world les données du monde
+ */
+
+
+void clean_data(world_t *world){
+    /* utile uniquement si vous avez fait de l'allocation dynamique (malloc); la fonction ici doit permettre de libérer la mémoire (free) */
+    free(world->vaisseau);
+}
+
+
diff --git a/library/World/world.h b/library/World/world.h
new file mode 100644
index 0000000000000000000000000000000000000000..64e7afee74475f1f91651bd203bde7ebfb0b318b
--- /dev/null
+++ b/library/World/world.h
@@ -0,0 +1,55 @@
+
+/**
+ * \brief Fichier qui contient les données du monde du jeu
+ * 
+ */
+
+#include "../../constante.c"
+
+#ifndef WORLD_H
+#define WORLD_H
+
+/**
+ * \brief Représentation pour stocker les données du vaisseau ou autre sprites
+ * 
+ */
+
+struct sprite_s{
+    int x;
+    int y;
+    int w;
+    int h;
+};
+
+typedef struct sprite_s sprite_t;
+
+/**
+ * \brief Représentation du monde du jeu
+*/
+struct world_s{
+    sprite_t *vaisseau ; /*!< Représentation du vaisseau */
+    sprite_t *mur; /*!< Représentation du météorite */
+    sprite_t *ligneArriver;
+    int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */
+    int speed_h; /*!< Vitesse de déplacement horizontal des éléments du jeu */
+
+};
+/**
+ * \brief Type qui correspond aux données du monde
+ */
+
+typedef struct world_s world_t;
+
+void update_data(world_t *world);
+
+int is_game_over(world_t *world);
+
+void print_sprite(sprite_t *sprite);
+
+sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h);
+
+void init_data(world_t * world);
+
+void free_data(world_t * world);
+
+#endif
diff --git a/library/World/world.o b/library/World/world.o
new file mode 100644
index 0000000000000000000000000000000000000000..69556e66efb4aa19c8232a04632ed7f93c23de64
Binary files /dev/null and b/library/World/world.o differ
diff --git a/main.c b/main.c
index 64e2ec0568aa76b2274f2abb7e67826eb5d1a904..da291ac105268e6d9e3076916fe51bb7c451d211 100644
--- a/main.c
+++ b/main.c
@@ -8,198 +8,16 @@
 
 #include "sdl2-light.h"
 #include <stdio.h>
-
-/**
- * \brief Largeur de l'écran de jeu
- */
-#define SCREEN_WIDTH 300
-
-/**
- * \brief Hauteur de l'écran de jeu
- */
-#define SCREEN_HEIGHT 480
-
-
-/**
- * \brief Taille d'un vaisseau
- */
-
-#define SHIP_SIZE 32
-
-
-/**
- * \brief Taille d'un météorite
-*/
-
-#define METEORITE_SIZE 32
-
-
-/**
- * \brief Hauteur de la ligne d'arrivée
- */
-
-
-#define FINISH_LINE_HEIGHT 10
-
-
-/**
- * \brief Pas de déplacement horizontal du vaisseau
-*/
-
-#define MOVING_STEP 10
-
-
-/**
-  * \brief Vitesse initiale de déplacement vertical des éléments du jeu 
-*/
-
-#define INITIAL_SPEED 2
-
-
-
-
-/**
- * \brief Représentation pour stocker les textures nécessaires à l'affichage graphique
-*/
-
-struct textures_s{
-    SDL_Texture* background; /*!< Texture liée à l'image du fond de l'écran. */
-    SDL_Texture* ship; /*!< Texture liée à l'image du vaisseau. */
-    SDL_Texture* meteorite; /*!< Texture liée à l'image du météorite. */
-    SDL_Texture* finishLine; /*!< Texture liée à l'image de la ligne d'arrivée. */
-    /* A COMPLETER */
-};
+#include "library/Display/Display.h"
+#include "library/World/world.h"
 
 
-/**
- * \brief Type qui correspond aux textures du jeu
-*/
-
-typedef struct textures_s textures_t;
-
-
-/**
- * \brief Représentation pour stocker les données du vaisseau
- * 
- */
-struct sprite_s{
-    int x;
-    int y;
-    int w;
-    int h;
-};
-
-typedef struct sprite_s sprite_t;
-
-/**
- * \brief Représentation du monde du jeu
-*/
-
-struct world_s{
-    sprite_t *vaisseau ; /*!< Représentation du vaisseau */
-    sprite_t *mur; /*!< Représentation du météorite */
-    sprite_t *ligneArriver;
-    int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */
-    int speed_h; /*!< Vitesse de déplacement horizontal des éléments du jeu */
-
-};
-
-/**
- * \brief Type qui correspond aux données du monde
- */
-
-typedef struct world_s world_t;
-
 
 /**
  * \brief Fonction qui affiche les données du vaisseau
  * 
  */
 
-void print_sprite(sprite_t *sprite){
-    printf("x = %d, y = %d, w = %d, h = %d\n", sprite->x, sprite->y, sprite->w, sprite->h);
-}
-
-/**
- * \brief La fonction initialise les sprites du jeu
- * 
- * \param sprite 
- * \param x 
- * \param y 
- * \param w 
- * \param h 
- */
-sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h){
-    sprite = malloc(sizeof(sprite_t));
-    sprite->x = x;
-    sprite->y = y;
-    sprite->w = w;
-    sprite->h = h;
-    return sprite;
-}
-
-/**
- * \brief La fonction initialise les données du monde du jeu
- * \param world les données du monde
- */
-
-
-void init_data(world_t * world){
-    
-    //on n'est pas à la fin du jeu
-    world->gameover = 0;
-    world->speed_h = 0;
-
-    // Initialisation du vaisseau
-
-    
-    world->vaisseau = init_sprite(world->vaisseau, SCREEN_WIDTH/2 - SHIP_SIZE/2, SCREEN_HEIGHT - SHIP_SIZE, SHIP_SIZE, SHIP_SIZE);
-    world->mur = init_sprite(world->mur, 0, 0, 3*METEORITE_SIZE, 7*METEORITE_SIZE);
-    world->ligneArriver = init_sprite(world->ligneArriver, 0, -40, SCREEN_WIDTH, FINISH_LINE_HEIGHT);
-
-    print_sprite(world->vaisseau);
-}
-
-
-
-
-/**
- * \brief La fonction nettoie les données du monde
- * \param world les données du monde
- */
-
-
-void clean_data(world_t *world){
-    /* utile uniquement si vous avez fait de l'allocation dynamique (malloc); la fonction ici doit permettre de libérer la mémoire (free) */
-    free(world->vaisseau);
-}
-
-
-
-/**
- * \brief La fonction indique si le jeu est fini en fonction des données du monde
- * \param world les données du monde
- * \return 1 si le jeu est fini, 0 sinon
- */
-
-int is_game_over(world_t *world){
-    return world->gameover;
-}
-
-
-
-/**
- * \brief La fonction met à jour les données en tenant compte de la physique du monde
- * \param les données du monde
- */
-
-void update_data(world_t *world){
-    world->ligneArriver->y += INITIAL_SPEED - world->speed_h;
-    world->mur->y += INITIAL_SPEED - world->speed_h;
-}
-
-
-
 /**
  * \brief La fonction gère les évènements ayant eu lieu et qui n'ont pas encore été traités
  * \param event paramètre qui contient les événements
@@ -251,121 +69,12 @@ void handle_events(SDL_Event *event,world_t *world){
     }
 }
 
-
-/**
- * \brief La fonction nettoie les textures
- * \param textures les textures
-*/
-
-void clean_textures(textures_t *textures){
-    clean_texture(textures->background);
-    clean_texture(textures->ship);
-    clean_texture(textures->meteorite);
-    clean_texture(textures->finishLine);
-
-    /* A COMPLETER */
-}
-
-
-
 /**
  * \brief La fonction initialise les textures nécessaires à l'affichage graphique du jeu
  * \param screen la surface correspondant à l'écran de jeu
  * \param textures les textures du jeu
 */
 
-void  init_textures(SDL_Renderer *renderer, textures_t *textures){
-    textures->background = load_image( "ressources/space-background.bmp",renderer);
-    textures->ship = load_image( "ressources/spaceship.bmp",renderer);
-    textures->meteorite = load_image( "ressources/meteorite.bmp",renderer);
-    textures->finishLine = load_image( "ressources/finish_line.bmp",renderer);
-    
-    /* A COMPLETER */
-
-    
-}
-
-
-/**
- * \brief La fonction applique la texture du fond sur le renderer lié à l'écran de jeu
- * \param renderer le renderer
- * \param texture la texture liée au fond
-*/
-
-void apply_background(SDL_Renderer *renderer, SDL_Texture *texture){
-    if(texture != NULL){
-      apply_texture(texture, renderer, 0, 0);
-    }
-}
-
-void apply_sprite(SDL_Renderer * renderer, SDL_Texture *texture, sprite_t *sprite){
-    if(texture != NULL){
-        SDL_Rect rect;
-        rect.x = sprite->x;
-        rect.y = sprite->y;
-        rect.w = sprite->w;
-        rect.h = sprite->h;
-        SDL_RenderCopy(renderer, texture, NULL, &rect);
-    }
-}
-
-void apply_wall(SDL_Renderer * renderer, SDL_Texture *texture, int x, int y){
-    if(texture != NULL){
-        SDL_Rect rect;
-        rect.x = x;
-        rect.y = y;
-        rect.w = METEORITE_SIZE;
-        rect.h = METEORITE_SIZE;
-        SDL_RenderCopy(renderer, texture, NULL, &rect);
-    }
-}
-
-
-/**
- * \brief La fonction rafraichit l'écran en fonction de l'état des données du monde
- * \param renderer le renderer lié à l'écran de jeu
- * \param world les données du monde
- * \param textures les textures
- */
-
-void refresh_graphics(SDL_Renderer *renderer, world_t *world,textures_t *textures){
-
-    //on vide le renderer
-    clear_renderer(renderer);
-    
-    //application des textures dans le renderer
-    apply_background(renderer, textures->background);
-    /* A COMPLETER */
-    apply_sprite(renderer, textures->ship, world->vaisseau);
-
-    apply_sprite(renderer, textures->finishLine, world->ligneArriver);
-
-    for (int i = 0; i < world->mur->w/METEORITE_SIZE ; i++){
-        for (int i2 = 0; i2 < world->mur->h/METEORITE_SIZE ; i2++){
-            apply_wall(renderer, textures->meteorite, world->mur->x+i*METEORITE_SIZE, world->mur->y+i2*METEORITE_SIZE);
-        }
-    }
-    
-
-    // on met à jour l'écran
-    update_screen(renderer);
-}
-
-
-
-/**
-* \brief fonction qui nettoie le jeu: nettoyage de la partie graphique (SDL), nettoyage des textures, nettoyage des données
-* \param window la fenêtre du jeu
-* \param renderer le renderer
-* \param textures les textures
-* \param world le monde
-*/
-
-void clean(SDL_Window *window, SDL_Renderer * renderer, textures_t *textures, world_t * world){
-    clean_data(world);
-    clean_textures(textures);
-    clean_sdl(renderer,window);
-}
 
 
 
diff --git a/main.o b/main.o
index ea24b91200aa77c889204cf77230e9a71b225a18..1c4119f69837b2b9e6960a091117f09ef7b55d13 100644
Binary files a/main.o and b/main.o differ
diff --git a/spacecorridor.exe b/spacecorridor.exe
index f6afb07d558e13762ed9955ea1aea9a6dfc42eda..9c007bfc6c0c05ab510c84aba673698a64238917 100644
Binary files a/spacecorridor.exe and b/spacecorridor.exe differ