traitement de tout les input avant de update l'ecrant

This commit is contained in:
2024-12-20 16:11:59 +01:00
parent f01c3d1e8b
commit 02a2945bd6

View File

@@ -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.
*
*/
@@ -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.
* \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)
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.
* \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.
* \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)
void move (char **tab, vect *playerPos, vect direction, score *score_user)
{
short int valueOfNCase
= tab[playerPos->x + direction.x][playerPos->y + direction.y];
@@ -234,15 +240,16 @@ void move (char **tab, vect *playerPos, vect direction,
* \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 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.
* \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)
void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets,
int nbr_targets, dis *display_user, score *score_user)
{
vect size_menu
@@ -255,8 +262,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
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);
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,8 +273,8 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
SDL_Event event;
while (!finish)
{
SDL_PollEvent (&event);
while (SDL_PollEvent (&event))
{
if (event.type == SDL_KEYDOWN)
{
input = event.key.keysym.scancode;
@@ -305,9 +311,10 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
char nbr_b[20];
snprintf (nbr_b, 20, "MB : %d", score_user->move_box);
displayTextSDL (display_user, nbr_p, coor_move_player, size_menu,
displayTextSDL (display_user, nbr_p, coor_move_player,
size_menu, 50);
displayTextSDL (display_user, nbr_b, coor_move_box, size_menu,
50);
displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, 50);
if (isWin (tab2d, targets, nbr_targets))
{
puts ("Win!");
@@ -319,13 +326,14 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
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);
displayTextSDL (display_user, char_time, coor_time, size_menu, 50);
free (char_time);
}
@@ -338,7 +346,8 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
* \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 .
* \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)
{
@@ -407,7 +416,8 @@ vect plusVect (vect one, vect two)
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é.
* \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.