traitement de tout les input avant de update l'ecrant
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* \file function.c
|
* \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 <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Cette fonction permet de creer une liste 2D carre
|
* \brief Cette fonction permet de creer une liste 2D carre
|
||||||
* \param N La valeur N est le nombre d'élément dans le tableau.
|
* \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).
|
* \return Le pointeur du tableau 2D carre de char (1 octet).
|
||||||
*/
|
*/
|
||||||
char **creatArea2D (const unsigned int N)
|
char **creatArea2D (const unsigned int N)
|
||||||
{
|
{
|
||||||
char **tab2d;
|
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.
|
* \brief Cette fontion permet de liberer l'espace tu tableau 2D de char.
|
||||||
* \param tab Le tableau 2D.
|
* \param tab Le tableau 2D.
|
||||||
* \param N Le nombre d'éléments.
|
* \param N Le nombre d'éléments.
|
||||||
* \return Void.
|
* \return Void.
|
||||||
*/
|
*/
|
||||||
void free2D (char **tab, int N)
|
void free2D (char **tab, int N)
|
||||||
{
|
{
|
||||||
int i;
|
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.
|
* \brief La fontction permet de savoir si le joueur peut ce deplacer dans une
|
||||||
* \param valueOfNCase La valeur de la case dans la direction que le joueur veut aller.
|
* direction.
|
||||||
* \param valueOfNPlusOneCase La valeur de la case dans la direction que le joueur veut aller mais une fois de plus.
|
* \param valueOfNCase La valeur de la case dans la direction que le joueur
|
||||||
* \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
|
* veut aller.
|
||||||
* ,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
|
* \param valueOfNPlusOneCase La valeur de la case dans la direction que le
|
||||||
* 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
|
* joueur veut aller mais une fois de plus.
|
||||||
* est aussi sur un point d'interer.
|
* \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
|
||||||
char canIGoDirection (char valueOfNCase,
|
* pousse une boite sur un point d'interer, 4 si le joueur bouge sur un point
|
||||||
char valueOfNPlusOneCase)
|
* 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)
|
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
|
||||||
* \param tab Le tableau 2D du plateau de jeu.
|
* fonction de la situation.
|
||||||
* \param playerpos La position actuel du joueur.
|
* \param tab Le tableau 2D du plateau de jeu.
|
||||||
* \param direction La direction que le joueur veut effectuer.
|
* \param playerpos La position actuel du joueur.
|
||||||
* \param score_user Toutes les données nécessaire pour calculer le score fini du joueur.
|
* \param direction La direction que le joueur veut effectuer.
|
||||||
* \return Void
|
* \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
|
short int valueOfNCase
|
||||||
= tab[playerPos->x + direction.x][playerPos->y + direction.y];
|
= 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.
|
* \brief La fonction permet de faire la boucle de jeu.
|
||||||
* \param tab2d Le tableau 2d carre.
|
* \param tab2d Le tableau 2d carre.
|
||||||
* \param N LE nombre d'element de tab2d.
|
* \param N LE nombre d'element de tab2d.
|
||||||
* \param playerPos La position de depart du joueur.
|
* \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
|
||||||
* \param int nbr_targets Le nombre de point d'interer.
|
* maps.
|
||||||
* \param display_user Tout les information SDL pour afficher le jeu.
|
* \param int nbr_targets Le nombre de point d'interer.
|
||||||
* \param score_user Toute les données nécessaire pour calculer le score fini du joueur.
|
* \param display_user Tout les information SDL pour afficher le jeu.
|
||||||
* \return Void
|
* \param score_user Toute les données nécessaire pour calculer le score fini
|
||||||
*/
|
* du joueur.
|
||||||
void inGameLoop (char **tab2d, int N, vect *playerPos,
|
* \return Void
|
||||||
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
|
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
|
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
|
vect coor_move_player
|
||||||
= { display_user->size_window / 3 + 10,
|
= { 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
|
vect coor_move_box
|
||||||
= { (display_user->size_window / 3) * 2 + 10,
|
= { (display_user->size_window / 3) * 2 + 10,
|
||||||
display_user->size_window - display_user->size_menu + 10};
|
display_user->size_window - display_user->size_menu + 10 };
|
||||||
displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu,
|
displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50);
|
||||||
50);
|
|
||||||
displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50);
|
displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50);
|
||||||
time_t time_start = time (NULL);
|
time_t time_start = time (NULL);
|
||||||
time_t current_time = time (NULL);
|
time_t current_time = time (NULL);
|
||||||
@@ -267,8 +273,8 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
|
|||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (!finish)
|
while (!finish)
|
||||||
{
|
{
|
||||||
SDL_PollEvent (&event);
|
while (SDL_PollEvent (&event))
|
||||||
|
{
|
||||||
if (event.type == SDL_KEYDOWN)
|
if (event.type == SDL_KEYDOWN)
|
||||||
{
|
{
|
||||||
input = event.key.keysym.scancode;
|
input = event.key.keysym.scancode;
|
||||||
@@ -305,9 +311,10 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
|
|||||||
char nbr_b[20];
|
char nbr_b[20];
|
||||||
snprintf (nbr_b, 20, "MB : %d", score_user->move_box);
|
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);
|
50);
|
||||||
displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, 50);
|
|
||||||
if (isWin (tab2d, targets, nbr_targets))
|
if (isWin (tab2d, targets, nbr_targets))
|
||||||
{
|
{
|
||||||
puts ("Win!");
|
puts ("Win!");
|
||||||
@@ -319,14 +326,15 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
|
|||||||
finish = true;
|
finish = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SDL_PollEvent (&event);
|
||||||
|
}
|
||||||
current_time = time (NULL);
|
current_time = time (NULL);
|
||||||
if (current_time > delay)
|
if (current_time > delay)
|
||||||
{
|
{
|
||||||
delay = current_time;
|
delay = current_time;
|
||||||
char *char_time = timeToText (time(NULL) - time_start);
|
char *char_time = timeToText (time (NULL) - time_start);
|
||||||
displayTextSDL (display_user, char_time, coor_time,
|
displayTextSDL (display_user, char_time, coor_time, size_menu, 50);
|
||||||
size_menu, 50);
|
free (char_time);
|
||||||
free(char_time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Delay (16);
|
SDL_Delay (16);
|
||||||
@@ -334,12 +342,13 @@ void inGameLoop (char **tab2d, int N, vect *playerPos,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Cette fonction verrifie si la partie est gagnante.
|
* \brief Cette fonction verrifie si la partie est gagnante.
|
||||||
* \param tab2d Le tableau 2D du jeu.
|
* \param tab2d Le tableau 2D du jeu.
|
||||||
* \param targets Le tableau de toute les positions des points d'interer.
|
* \param targets Le tableau de toute les positions des points d'interer.
|
||||||
* \param nbr_targets Le nombre de 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)
|
bool isWin (char **tab2d, vect *targets, int nbr_targets)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -356,12 +365,12 @@ bool isWin (char **tab2d, vect *targets, int nbr_targets)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief La fonction renvois si la partie est perdante.
|
* \brief La fonction renvois si la partie est perdante.
|
||||||
* \param tab2d Le tableau 2d carre du plateau de jeu.
|
* \param tab2d Le tableau 2d carre du plateau de jeu.
|
||||||
* \param N Le nombre d'éléments dans le tab2d.
|
* \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.
|
* \return True si c'est perdu, false si c'est pas perdu a cette instant.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
bool islose (char **tab2d, const int N)
|
bool islose (char **tab2d, const int N)
|
||||||
{
|
{
|
||||||
int x = 0, y = 0;
|
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).
|
* \brief La fonction fait une addition de vecteur, (x1+x2, y1+y2).
|
||||||
* \param one Premier vecteur.
|
* \param one Premier vecteur.
|
||||||
* \param two Deuzieme vecteur.
|
* \param two Deuzieme vecteur.
|
||||||
* \return vect Un vecteur de l'addition de one et two.
|
* \return vect Un vecteur de l'addition de one et two.
|
||||||
*/
|
*/
|
||||||
vect plusVect (vect one, vect two)
|
vect plusVect (vect one, vect two)
|
||||||
{
|
{
|
||||||
vect result;
|
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); }
|
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
|
||||||
* \param tab2d Le tableau 2D carre du plateau de jeu.
|
* le joueur ne poura pas la debloqué.
|
||||||
* \param box_coor Les corrdonnée de la boite que la fonction test.
|
* \param tab2d Le tableau 2D carre du plateau de jeu.
|
||||||
* \return True si la la boite est bloquer, sinon false.
|
* \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)
|
bool blockBox (char **tab2d, vect box_coor)
|
||||||
{
|
{
|
||||||
int nbr_touch = 0;
|
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)
|
* \brief Cette fonction renvois transforme le forma time en texte. (min:sec)
|
||||||
* \param time Le temps qu'on veux convertire.
|
* \param time Le temps qu'on veux convertire.
|
||||||
* \return char Le string du texte.
|
* \return char Le string du texte.
|
||||||
*/
|
*/
|
||||||
char *timeToText (time_t time)
|
char *timeToText (time_t time)
|
||||||
{
|
{
|
||||||
char *result = calloc (20, sizeof (char));
|
char *result = calloc (20, sizeof (char));
|
||||||
|
|||||||
Reference in New Issue
Block a user