diff --git a/src/main.c b/src/main.c
index 774c22b46434b03669af72c1c926918c3fd368f8..5c6d963f7872b2e3c3e30dac742b0c0c77455d70 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,36 +1,70 @@
+/**
+ * @file main.c
+ * @author Efe ERKEN (efe.erken@etu.unistra.fr)
+ * @brief Fichier source centrale qui fait marcher le jeu
+ * @version 0.1
+ * @date 2022-11-19
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include "grid.h"
 #include "player.h"
 
+/**
+ * @brief La fonction qui réuni toutes les autres fonctions et structures
+ *
+ * @return int
+ *
+ * @pre -
+ * @post -
+ *
+ * Cette fonction est le coeur du jeu Sokoban. Elle lit un fichier contenant un niveau
+ * de jeu, elle charge ce niveau dans la structure appropriée @c grid. Elle affiche le
+ * niveau chargé dans le terminal. Elle lit les entrées au clavier de l'utilisateur
+ * pour bouger le joueur dans le niveau.
+ */
 int main()
 {
+    // on charge le niveau de jeu depuis un fichier
     grid *level = init_level("levels/level1.txt");
-    char entry = '\0';
-    bool run = true;
+    char entry = '\0'; // on initialise le stockage pour les entrées de l'utilisateur
+    bool run = true; // on initialise l'interrupteur de boucle
+    // on continue le jeu tant que l'utilisateur n'a pas appuyé sur 'q'
     while (run)
     {
+        // on affiche les messages sur comment interagir
         printf("\nAppuyez sur \"q\" pour quitter\n");
         printf("Appuyez sur \"h, j, k, l\" pour vous déplacer\n\n");
+        // on affiche le niveau de jeu
         display(level);
         printf("Votre choix : ");
+        // on récupère l'entrée de l'utilisateur
         scanf(" %c", &entry);
+        // on décide ce qu'on va faire en fonction de l'entrée
         switch (entry)
         {
+        // on quitte le jeu si l'entrée est 'q'
         case 'q':
             run = false;
             break;
+        // on bouge le jouer dans le sens correspondant si l'entrée est 'h', 'j', 'k' ou 'l'
         case 'h':
         case 'j':
         case 'k':
         case 'l':
             move_player(level, entry);
             break;
+        // on affiche un message si l'entrée n'est pas définie dans le programme
         default:
             printf("---> Cette touche n'a pas de fonctionnalité\n");
         }
     }
+    // on désalloue la structure qui stockait le niveau
     free_level(level);
     return EXIT_SUCCESS;
 }