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; }