From 02a2945bd6bb3e9640866a10a63a0dd44b444197 Mon Sep 17 00:00:00 2001 From: Aubin DORIVAL Date: Fri, 20 Dec 2024 16:11:59 +0100 Subject: [PATCH] traitement de tout les input avant de update l'ecrant --- script/function.c | 266 ++++++++++++++++++++++++---------------------- 1 file changed, 138 insertions(+), 128 deletions(-) diff --git a/script/function.c b/script/function.c index 871a727..2312e6f 100644 --- a/script/function.c +++ b/script/function.c @@ -1,6 +1,7 @@ /** * \file function.c - * Ce fichier contient toute les fonction utile pour le jeu. Sauf pour l'affichage. + * Ce fichier contient toute les fonction utile pour le jeu. Sauf pour + * l'affichage. * */ @@ -18,10 +19,10 @@ #include /** -* \brief Cette fonction permet de creer une liste 2D carre -* \param N La valeur N est le nombre d'élément dans le tableau. -* \return Le pointeur du tableau 2D carre de char (1 octet). -*/ + * \brief Cette fonction permet de creer une liste 2D carre + * \param N La valeur N est le nombre d'élément dans le tableau. + * \return Le pointeur du tableau 2D carre de char (1 octet). + */ char **creatArea2D (const unsigned int N) { char **tab2d; @@ -56,11 +57,11 @@ char **creatArea2D (const unsigned int N) } /** -* \brief Cette fontion permet de liberer l'espace tu tableau 2D de char. -* \param tab Le tableau 2D. -* \param N Le nombre d'éléments. -* \return Void. -*/ + * \brief Cette fontion permet de liberer l'espace tu tableau 2D de char. + * \param tab Le tableau 2D. + * \param N Le nombre d'éléments. + * \return Void. + */ void free2D (char **tab, int N) { int i; @@ -73,16 +74,20 @@ void free2D (char **tab, int N) } /** -* \brief La fontction permet de savoir si le joueur peut ce deplacer dans une direction. -* \param valueOfNCase La valeur de la case dans la direction que le joueur veut aller. -* \param valueOfNPlusOneCase La valeur de la case dans la direction que le joueur veut aller mais une fois de plus. -* \return 0 Si c'est un mur devant le joueur, 1 si c'est vide devant le joueur, 2 si c'est une boite mais qu'on peux la pousser -* ,3 si le joueur pousse une boite sur un point d'interer, 4 si le joueur bouge sur un point d'interer, 5 si le joueur peux pousser -* une boite mais le joueur se place sur un point d'interer et 6 si le joeuur pousse une boite sur un point d'interer et que le joueu -* est aussi sur un point d'interer. -*/ -char canIGoDirection (char valueOfNCase, - char valueOfNPlusOneCase) + * \brief La fontction permet de savoir si le joueur peut ce deplacer dans une + * direction. + * \param valueOfNCase La valeur de la case dans la direction que le joueur + * veut aller. + * \param valueOfNPlusOneCase La valeur de la case dans la direction que le + * joueur veut aller mais une fois de plus. + * \return 0 Si c'est un mur devant le joueur, 1 si c'est vide devant le + * joueur, 2 si c'est une boite mais qu'on peux la pousser ,3 si le joueur + * pousse une boite sur un point d'interer, 4 si le joueur bouge sur un point + * d'interer, 5 si le joueur peux pousser une boite mais le joueur se place sur + * un point d'interer et 6 si le joeuur pousse une boite sur un point d'interer + * et que le joueu est aussi sur un point d'interer. + */ +char canIGoDirection (char valueOfNCase, char valueOfNPlusOneCase) { if (valueOfNCase != WALL) { @@ -126,16 +131,17 @@ char canIGoDirection (char valueOfNCase, } /** -* \brief Cette fonction effectue les deplacements du joueur et des boites en fonction de la situation. -* \param tab Le tableau 2D du plateau de jeu. -* \param playerpos La position actuel du joueur. -* \param direction La direction que le joueur veut effectuer. -* \param score_user Toutes les données nécessaire pour calculer le score fini du joueur. -* \return Void -* -*/ -void move (char **tab, vect *playerPos, vect direction, - score *score_user) + * \brief Cette fonction effectue les deplacements du joueur et des boites en + * fonction de la situation. + * \param tab Le tableau 2D du plateau de jeu. + * \param playerpos La position actuel du joueur. + * \param direction La direction que le joueur veut effectuer. + * \param score_user Toutes les données nécessaire pour calculer le score fini + * du joueur. + * \return Void + * + */ +void move (char **tab, vect *playerPos, vect direction, score *score_user) { short int valueOfNCase = tab[playerPos->x + direction.x][playerPos->y + direction.y]; @@ -229,34 +235,34 @@ void move (char **tab, vect *playerPos, vect direction, } /** -* -* \brief La fonction permet de faire la boucle de jeu. -* \param tab2d Le tableau 2d carre. -* \param N LE nombre d'element de tab2d. -* \param playerPos La position de depart du joueur. -* \param targets Le tableau de toutes les positions des points d'interer de la maps. -* \param int nbr_targets Le nombre de point d'interer. -* \param display_user Tout les information SDL pour afficher le jeu. -* \param score_user Toute les données nécessaire pour calculer le score fini du joueur. -* \return Void -*/ -void inGameLoop (char **tab2d, int N, vect *playerPos, - vect *targets, int nbr_targets, dis *display_user, - score *score_user) + * + * \brief La fonction permet de faire la boucle de jeu. + * \param tab2d Le tableau 2d carre. + * \param N LE nombre d'element de tab2d. + * \param playerPos La position de depart du joueur. + * \param targets Le tableau de toutes les positions des points d'interer de la + * maps. + * \param int nbr_targets Le nombre de point d'interer. + * \param display_user Tout les information SDL pour afficher le jeu. + * \param score_user Toute les données nécessaire pour calculer le score fini + * du joueur. + * \return Void + */ +void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, + int nbr_targets, dis *display_user, score *score_user) { vect size_menu - = { display_user->size_menu -10, display_user->size_window / 3 -10}; + = { display_user->size_menu - 10, display_user->size_window / 3 - 10 }; vect coor_time - = { 10, display_user->size_window - display_user->size_menu + 10}; + = { 10, display_user->size_window - display_user->size_menu + 10 }; vect coor_move_player = { display_user->size_window / 3 + 10, - display_user->size_window - display_user->size_menu + 10}; + display_user->size_window - display_user->size_menu + 10 }; vect coor_move_box = { (display_user->size_window / 3) * 2 + 10, - display_user->size_window - display_user->size_menu + 10}; - displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, - 50); + display_user->size_window - display_user->size_menu + 10 }; + displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50); displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50); time_t time_start = time (NULL); time_t current_time = time (NULL); @@ -267,66 +273,68 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, SDL_Event event; while (!finish) { - SDL_PollEvent (&event); - - if (event.type == SDL_KEYDOWN) + while (SDL_PollEvent (&event)) { - input = event.key.keysym.scancode; - switch (input) + if (event.type == SDL_KEYDOWN) { - case SDL_SCANCODE_ESCAPE: - finish = true; - break; - case SDL_SCANCODE_D: - direction.y = 1; - direction.x = 0; - break; - case SDL_SCANCODE_A: - direction.y = -1; - direction.x = 0; - break; - case SDL_SCANCODE_W: - direction.x = -1; - direction.y = 0; - break; - case SDL_SCANCODE_S: - direction.x = 1; - direction.y = 0; - break; - default: - direction.x = 0; - direction.y = 0; - } - move (tab2d, playerPos, direction, score_user); + input = event.key.keysym.scancode; + switch (input) + { + case SDL_SCANCODE_ESCAPE: + finish = true; + break; + case SDL_SCANCODE_D: + direction.y = 1; + direction.x = 0; + break; + case SDL_SCANCODE_A: + direction.y = -1; + direction.x = 0; + break; + case SDL_SCANCODE_W: + direction.x = -1; + direction.y = 0; + break; + case SDL_SCANCODE_S: + direction.x = 1; + direction.y = 0; + break; + default: + direction.x = 0; + direction.y = 0; + } + move (tab2d, playerPos, direction, score_user); - screenDisplayGameSDL (tab2d, display_user); - char nbr_p[20]; - snprintf (nbr_p, 20, "MP : %d", score_user->move_player); - char nbr_b[20]; - snprintf (nbr_b, 20, "MB : %d", score_user->move_box); + screenDisplayGameSDL (tab2d, display_user); + char nbr_p[20]; + snprintf (nbr_p, 20, "MP : %d", score_user->move_player); + char nbr_b[20]; + snprintf (nbr_b, 20, "MB : %d", score_user->move_box); - displayTextSDL (display_user, nbr_p, coor_move_player, size_menu, - 50); - displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, 50); - if (isWin (tab2d, targets, nbr_targets)) - { - puts ("Win!"); - finish = true; - } - if (islose (tab2d, N)) - { - puts ("lose!"); - finish = true; + displayTextSDL (display_user, nbr_p, coor_move_player, + size_menu, 50); + displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, + 50); + if (isWin (tab2d, targets, nbr_targets)) + { + puts ("Win!"); + finish = true; + } + if (islose (tab2d, N)) + { + puts ("lose!"); + finish = true; + } } + SDL_PollEvent (&event); } current_time = time (NULL); if (current_time > delay) { delay = current_time; - char *char_time = timeToText (time(NULL) - time_start); - displayTextSDL (display_user, char_time, coor_time, - size_menu, 50); - free(char_time); + char *char_time = timeToText (time (NULL) - time_start); + displayTextSDL (display_user, char_time, coor_time, size_menu, 50); + free (char_time); } SDL_Delay (16); @@ -334,12 +342,13 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, } /** -* \brief Cette fonction verrifie si la partie est gagnante. -* \param tab2d Le tableau 2D du jeu. -* \param targets Le tableau de toute les positions des points d'interer. -* \param nbr_targets Le nombre de points d'interer. -* \return True si le joueur a remplis tout les points d'interer, false si ce n'est pas le cas . -*/ + * \brief Cette fonction verrifie si la partie est gagnante. + * \param tab2d Le tableau 2D du jeu. + * \param targets Le tableau de toute les positions des points d'interer. + * \param nbr_targets Le nombre de points d'interer. + * \return True si le joueur a remplis tout les points d'interer, false si ce + * n'est pas le cas . + */ bool isWin (char **tab2d, vect *targets, int nbr_targets) { int i; @@ -356,12 +365,12 @@ bool isWin (char **tab2d, vect *targets, int nbr_targets) } /** -* \brief La fonction renvois si la partie est perdante. -* \param tab2d Le tableau 2d carre du plateau de jeu. -* \param N Le nombre d'éléments dans le tab2d. -* \return True si c'est perdu, false si c'est pas perdu a cette instant. -* -*/ + * \brief La fonction renvois si la partie est perdante. + * \param tab2d Le tableau 2d carre du plateau de jeu. + * \param N Le nombre d'éléments dans le tab2d. + * \return True si c'est perdu, false si c'est pas perdu a cette instant. + * + */ bool islose (char **tab2d, const int N) { int x = 0, y = 0; @@ -388,11 +397,11 @@ bool islose (char **tab2d, const int N) } /** -* \brief La fonction fait une addition de vecteur, (x1+x2, y1+y2). -* \param one Premier vecteur. -* \param two Deuzieme vecteur. -* \return vect Un vecteur de l'addition de one et two. -*/ + * \brief La fonction fait une addition de vecteur, (x1+x2, y1+y2). + * \param one Premier vecteur. + * \param two Deuzieme vecteur. + * \return vect Un vecteur de l'addition de one et two. + */ vect plusVect (vect one, vect two) { vect result; @@ -402,16 +411,17 @@ vect plusVect (vect one, vect two) } /** -* \brief Renvois la longeur Manhattan -*/ + * \brief Renvois la longeur Manhattan + */ int lengthVect (vect vector) { return abs (vector.x) + abs (vector.y); } /** -* \brief La fonction permet de savoir si une boite est dans une situation ou le joueur ne poura pas la debloqué. -* \param tab2d Le tableau 2D carre du plateau de jeu. -* \param box_coor Les corrdonnée de la boite que la fonction test. -* \return True si la la boite est bloquer, sinon false. -*/ + * \brief La fonction permet de savoir si une boite est dans une situation ou + * le joueur ne poura pas la debloqué. + * \param tab2d Le tableau 2D carre du plateau de jeu. + * \param box_coor Les corrdonnée de la boite que la fonction test. + * \return True si la la boite est bloquer, sinon false. + */ bool blockBox (char **tab2d, vect box_coor) { int nbr_touch = 0; @@ -513,10 +523,10 @@ bool blockBox (char **tab2d, vect box_coor) } /** -* \brief Cette fonction renvois transforme le forma time en texte. (min:sec) -* \param time Le temps qu'on veux convertire. -* \return char Le string du texte. -*/ + * \brief Cette fonction renvois transforme le forma time en texte. (min:sec) + * \param time Le temps qu'on veux convertire. + * \return char Le string du texte. + */ char *timeToText (time_t time) { char *result = calloc (20, sizeof (char));