diff --git a/V1/Makefile b/V1/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c5c5b88aefd404c9f11d1d0ce5191747c17c9340
--- /dev/null
+++ b/V1/Makefile
@@ -0,0 +1,21 @@
+CFLAGS = -Wall -O3 `sdl2-config --cflags`
+LDFLAGS = -m64 `sdl2-config --libs` -lSDL2_ttf -lm
+
+INC = sdl2.h logic.h graphics.h const.h data.h sdl2-ttf.h event.h 
+SRC = main.c sdl2.c logic.c graphics.c data.c sdl2-ttf.c event.c 
+OBJ = $(SRC:%.c=%.o)
+PROG = fastcar
+
+%.o: %.c $(INC)
+	gcc $(CFLAGS) -c $<
+
+fastcar: $(OBJ)
+	gcc $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@
+
+doc: $(PROG)
+	doxygen ./$(PROG)
+	make -C latex
+
+clean:
+	rm -f *~ *.o $(PROG)
+	rm -rf latex html
diff --git a/V1/Makefile_win b/V1/Makefile_win
new file mode 100644
index 0000000000000000000000000000000000000000..318c22134078590eff221d770e82af69891b5533
--- /dev/null
+++ b/V1/Makefile_win
@@ -0,0 +1,24 @@
+CFLAGS = -Wall -O3 -Dmain=SDL_main
+LDFLAGS = -m64 -lm -lmingw32 -lSDL2main -lSDL2 -lSDL2_ttf
+SDL2_INCLUDE_DIR = C:\SDL2-2.0.12\x86_64-w64-mingw32\include
+SDL2_LIBRARIES_DIR = C:\SDL2-2.0.12\x86_64-w64-mingw32\lib
+
+INC = sdl2.h logic.h graphics.h const.h data.h sdl2-ttf.h event.h
+SRC = main.c sdl2.c logic.c graphics.c data.c sdl2-ttf.c event.c
+OBJ = $(SRC:%.c=%.o)
+
+PROG = fastcar.exe
+
+%.o: %.c $(INC)
+	gcc $(CFLAGS) -c $<  -I $(SDL2_INCLUDE_DIR)
+
+$(PROG): $(OBJ)
+	gcc $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@ -L $(SDL2_LIBRARIES_DIR)
+
+doc: $(PROG)
+	doxygen $(PROG)
+
+.PHONY: clean
+clean:
+	del /f /q *.o *~ $(PROG)
+	rd /s /q latex html
diff --git a/V1/const.h b/V1/const.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4a314a8e3d555ad704180aa16685590f3babec2
--- /dev/null
+++ b/V1/const.h
@@ -0,0 +1,62 @@
+/**
+ * \file const.h
+ * \brief Rassemblement des constantes utiles au jeu
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+#ifndef __CONST_H__
+#define __CONST_H__
+
+
+
+/**
+  * \brief Largeur de l'écran de jeu
+  */
+#define SCREEN_WIDTH 840  
+
+/**
+  * \brief Hauteur de l'écran de jeu
+  */
+#define SCREEN_HEIGHT 650
+
+
+/**
+  * \brief Taille d'un vaisseau
+  */
+#define SHIP_SIZE 100
+
+/**
+  * \brief Nombre de bullets 
+  */
+#define NB_BULLETS 30
+
+
+/**
+  * \brief Nombre de bullets 
+  */
+#define BULLET_SIZE 8
+
+
+/**
+  * \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 
+
+#define NB_BACKGROUND 2000
+
+#define NB_VOITURES 3
+
+
+#endif
\ No newline at end of file
diff --git a/V1/data.h b/V1/data.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e2cd2c62457614e8584e976550444f04b30acf7
--- /dev/null
+++ b/V1/data.h
@@ -0,0 +1,132 @@
+/**
+ * \file data.h
+ * \brief Gestion des données du jeu
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+ 
+#ifndef __DATA_H__
+#define __DATA_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include "sdl2.h"
+#include "sdl2-ttf.h"
+#include "const.h"
+
+
+
+
+enum{
+    SPACESHIP,
+    BULLET,
+    METEORE,
+    FINISH_LINE,
+    BACKGROUND,
+};
+
+
+enum{
+    CONTINUE,
+    EXIT,
+    LOOSE,
+    WIN,
+};
+
+
+
+/**
+ * \brief Représentation du sprite
+*/
+struct sprite_s{
+    double x; /*!<L'abscisse au centre*/
+    double y; /*!<L'ordonnée au centre*/
+    double w; /*!<largeur*/
+    double h; /*!<hauteur*/
+    char is_visible; /*!< Champ indiquant si le sprite est visible */
+    int type; /*!< Champ indiquant le type de sprite (cf l'enum de ce fichier) */
+};
+/**
+ * \brief Type qui correspond aux sprite
+ */
+typedef struct sprite_s sprite_t  ;
+
+
+
+
+/**
+ * \brief Représentation des bullets
+*/
+struct bullet_s{
+    sprite_t bullet;
+    double vy;
+};
+/**
+ * \brief Type qui correspond aux bullet
+ */
+typedef struct bullet_s bullet_t;
+
+
+/**
+ * \brief Représentation des bullets
+*/
+struct bullets_s{
+    bullet_t bullet[NB_BULLETS];
+    int bullet_nb;
+};
+/**
+ * \brief Type qui correspond aux bullets
+ */
+typedef struct bullets_s bullets_t;
+
+
+/**
+ * \brief Représentation d'un spaceship
+*/
+struct spaceship_s{
+    sprite_t spaceship;
+    bullets_t bullets;
+};
+/**
+ * \brief Type qui correspond à un spaceship
+ */
+typedef struct spaceship_s spaceship_t;
+
+
+/**
+ * \brief Représentation du monde du jeu
+*/
+struct world_s{
+    spaceship_t spaceship;
+    sprite_t background;
+    sprite_t finish_line;
+    double vy; /*!< Champ indiquant la vitesse sur l'axe des y */
+    
+    int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */
+
+    Uint32 t0; /*!<Ticks de la première frame (SDL_GetTicks()) */
+};
+/**
+ * \brief Type qui correspond aux données du monde
+ */
+typedef struct world_s world_t;
+
+
+
+#include "graphics.h"
+
+
+
+int is_game_over(world_t *world);
+void init_spaceship(spaceship_t *spaceship);
+void init_sprite(sprite_t *sprite, double x, double y, double w, double h, int type);
+void init_data(world_t *world);
+void init_bullet(spaceship_t *spaceship);
+void clean_data(world_t *world);
+
+void update_background(world_t* world);
+void update_data(world_t *world);
+
+#endif
\ No newline at end of file
diff --git a/V1/event.h b/V1/event.h
new file mode 100644
index 0000000000000000000000000000000000000000..385a54a125cec018dc381fdfca8d0ae89c353887
--- /dev/null
+++ b/V1/event.h
@@ -0,0 +1,24 @@
+/**
+ * \file event.h
+ * \brief Gestion des entrées claviers du joueur
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+#ifndef __EVENT_H__
+#define __EVENT_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sdl2.h"
+#include "sdl2-ttf.h"
+#include "const.h"
+#include "data.h"
+
+
+
+void handle_events(SDL_Event *event, world_t *world);
+
+
+
+#endif
\ No newline at end of file
diff --git a/V1/graphics.h b/V1/graphics.h
new file mode 100644
index 0000000000000000000000000000000000000000..d51359c3b53d9ecfb2a1dfad0c57043407f463a0
--- /dev/null
+++ b/V1/graphics.h
@@ -0,0 +1,53 @@
+/**
+ * \file graphics.h
+ * \brief Gestion de l'affichage du jeu
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+#ifndef __GRAPHICS_H__
+#define __GRAPHICS_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sdl2.h"
+#include "sdl2-ttf.h"
+#include "const.h"
+
+
+
+/**
+ * \brief Représentation pour stocker les textures nécessaires à l'affichage graphique
+*/
+struct ressources_s{
+    SDL_Texture* background; /*!< Texture liée à l'image du fond de l'écran. */
+    SDL_Texture* spaceship; /*!< Texture liée au vaisseau affiché sur l'écran. */
+    SDL_Texture* finish_line; /*!< Texture liée à la ligne d'arrivée affiché sur l'écran. */
+    SDL_Texture* meteorite; /*!< Texture liée au météorite sur l'écran. */
+    SDL_Texture* bullet; /*!< Texture liée à la bullet sur l'écran. */
+    TTF_Font* font; /*!< Police d'écriture utilisé */
+};
+/**
+ * \brief Type qui correspond aux textures du jeu
+*/
+typedef struct ressources_s ressources_t;
+
+
+
+#include "data.h"
+
+
+
+void init_textures(SDL_Renderer *renderer, ressources_t *ressources);
+void clean_textures(ressources_t *ressources);
+void apply_background(SDL_Renderer *renderer, SDL_Texture *texture);
+void apply_sprite(SDL_Renderer *renderer, SDL_Texture *texture, sprite_t* sprite);
+void apply_bullets(SDL_Renderer *renderer, SDL_Texture *texture, bullets_t *bullets);
+void print_all_text(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
+void print_menu_debut(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
+void print_menu_fin(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
+void refresh_graphics(SDL_Renderer *renderer, world_t *world,ressources_t *ressources);
+
+
+
+#endif
\ No newline at end of file
diff --git a/V1/logic.h b/V1/logic.h
new file mode 100644
index 0000000000000000000000000000000000000000..660f024fe724e15b69ca0a705b3844c2228c47d8
--- /dev/null
+++ b/V1/logic.h
@@ -0,0 +1,26 @@
+/**
+ * \file logic.h
+ * \brief Gestion de la logique du jeu (physique)
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+#ifndef __LOGIC_H__
+#define __LOGIC_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sdl2.h"
+#include "sdl2-ttf.h"
+#include "const.h"
+#include "data.h"
+
+
+
+void screen_collide(sprite_t* s);
+int sprites_collide(sprite_t *sp1, sprite_t *sp2);
+void handle_sprites_collision(sprite_t *sp1, sprite_t *sp2, world_t *world);
+
+
+
+#endif
\ No newline at end of file
diff --git a/V1/sdl2-ttf.h b/V1/sdl2-ttf.h
new file mode 100644
index 0000000000000000000000000000000000000000..acad08879eebad0517ab2aba8d0fefaac2080c61
--- /dev/null
+++ b/V1/sdl2-ttf.h
@@ -0,0 +1,58 @@
+/**
+ * \file sdl2-ttf.h
+ * \brief 
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+
+#ifndef __SDL2_TTF_H
+#define __SDL2_TTF_H
+
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_ttf.h>
+
+
+/**
+ * \brief La fonction initialise l'environnement TTF
+*/
+void init_ttf();
+
+
+/**
+ * \brief La fonction charge une police
+ * \param path le chemin du fichier correpondant à la police
+ * \param font_size la taille de la police
+ * \return la police chargée
+*/
+
+TTF_Font * load_font(const char* path, int font_size);
+
+/**
+ * \brief La fonction applique un texte dans une certaine police sur le renderer à une certaine position et avec une certaine dimension
+ * \param renderer le renderer
+ * \param x abscisse du coin en haut à gauche du texte
+ * \param y son abscisse
+ * \param w la largeur du message
+ * \param h sa hauteur
+ * \param text le texte à afficher
+ * \param font la police
+*/
+
+void apply_text(SDL_Renderer *renderer, int x, int y, int w, int h, const char *text, TTF_Font *font, SDL_Color color);
+
+
+
+/**
+ * \brief La fonction nettoie une police en mémoire
+ * \param font la police
+*/
+void clean_font(TTF_Font * font);
+
+
+/**
+ * \brief La fonction ferme et nettoie l'environnement TTF
+*/
+void clean_ttf();
+
+#endif
+
diff --git a/V1/sdl2.h b/V1/sdl2.h
new file mode 100644
index 0000000000000000000000000000000000000000..f5127d14dacd29bb7df603e7c06d8f82a68c9a9b
--- /dev/null
+++ b/V1/sdl2.h
@@ -0,0 +1,87 @@
+/**
+ * \file sdl2.h
+ * \brief en-tête du module correspondant à une sur-couche de SDL2 pour simplifier son utilisation pour le projet
+ * \author YATIME Marouane - AIT OUALI Marouane
+ * \date 26 septembre 2021
+ */
+
+
+#ifndef __SDL2__H__
+#define __SDL2__H__
+
+#include <SDL2/SDL.h>
+
+
+/**
+ * \brief La fonction nettoie le renderer et la fenêtre du jeu en mémoire
+ * \param renderer le renderer à nettoyer
+ * \param window la fenêtre à nettoyer
+*/
+
+void clean_sdl(SDL_Renderer *renderer,SDL_Window *window);
+
+/**
+ * \brief La fonction charge une image  et renvoie la texture correspondante où la couleur RGB (255, 0, 255) est rendue transparente.
+ * \param path est le chemin du fichier image. Le fichier doit être obligatoirement du BMP.
+ * \param renderer le renderer
+ * \return la surface SDL contenant l'image avec la couleur RGB (255,0,255) rendue transparente. Elle renvoie NULL si le chargement a échoué
+ * (ex. le fichier path n'existe pas)
+*/
+SDL_Texture *load_image(const char path[], SDL_Renderer *renderer);
+
+
+/**
+ * \brief La fonction initialise la SDL.
+ * Elle crée la fenêtre du jeu ainsi que le renderer
+ *  \param window la fenêtre du jeu
+ *  \param renderer le renderer
+ * \param width largeur de l'écran de jeu
+ * \param height hauteur de l'écran de jeu
+ * \return -1 en cas d'erreur, 0 sinon
+*/
+
+int init_sdl(SDL_Window **window, SDL_Renderer **renderer, int width, int height);
+
+/**
+ * \brief La fonction nettoie une texture en mémoire
+ * \param texture la texture à nettoyer
+*/
+
+void clean_texture(SDL_Texture *texture);
+
+
+/**
+ * \brief La fonction permet d'appliquer une texture sur le renderer à une position donnée. La hauteur et la largeur est la même que celle de la texture.
+ * \param texture  la texture que l'on va appliquer
+ * \param renderer le renderer qui va recevoir la texture
+ * \param x l'abscisse sur le renderer de l'endroit où est appliquée texture (point en haut à gauche de la surface)
+ *  \param y l'ordonnée sur le renderer de l'endroit où est appliquée texture (point en haut à gauche de la surface)
+*/
+
+void apply_texture(SDL_Texture *texture,SDL_Renderer *renderer,int x, int y);
+
+
+
+/**
+ * \brief La fonction vide le contenu graphique du renderer lié à l'écran de jeu
+ * \param renderer le renderer de l'écran
+*/
+
+void clear_renderer(SDL_Renderer *renderer);
+
+/**
+ * \brief La fonction met à jour l'écran avec le contenu du renderer
+ * \param renderer le renderer de l'écran
+*/
+
+void update_screen(SDL_Renderer *renderer);
+
+/**
+ * \brief La fonction met le programme en pause pendant un laps de temps
+ * \param time ce laps de temps en milliseconde
+*/
+
+
+void pause(int time);
+
+#endif