Skip to content
Snippets Groups Projects
structures.h 6.21 KiB
/*! \file structures.h
 * \brief Fichier contenant les principales structures.
 * Definition des structures necessaires :
 * SOMMAIRE
 * Type_terrain
 * Case
 * Attaque
 * Classe
 * Personnage
 * Effet
 * Competence
 * Joueur
 * NodeJoueur
 * ListJoueur
 * Partie
 */

#ifndef STRUCTURES_H_INCLUDED
#define STRUCTURES_H_INCLUDED

/* \def TAILLE_MAX_CARTE */
#define TAILLE_MAX_CARTE 256
/* \def TAILLE_NOMS */
#define TAILLE_NOMS 16
/* \def TAILLE_MAX_GROUPE */
#define TAILLE_MAX_GROUPE 3

/*! \enum boolean
 * \brief Definition du type Boolean.
 *
 * faux=0, vrai=1
 */
typedef enum {faux, vrai} boolean;

/*! \struct Type_terrain structures.h
 * \brief Definition de la structure Type_terrain
 */
typedef struct {
    char nom[TAILLE_NOMS];/*!< Nom du terrain. */
    boolean franchissable;/*!< Le terrain est franchissable ou non par un personnage. */
    boolean franchissable_sorts;/*!< Le terrain est franchissable ou non par un sort. */
    unsigned short int PD_requis;/*!< Nombre de PD requis pour traverser le terrain. */
}type_terrain;

/*! \struct Case structures.h
 * \brief Definition de la structure Case
 */
typedef struct Case{
    unsigned short int coord_x; /*!< Abscisse de la case*/
    unsigned short int coord_y; /*!< Ordonnee de la case*/
    type_terrain *terrain; /*!< Le type de terrain de la case*/
    boolean occupee; /*!< La case est occupee ou non par un personnage*/
} Case;

/*! \typedef carte structures.h
 * \brief Definition du type Carte
 *
 * La carte est un tableau de Case de taille TAILLE_MAX_CARTE.
 */
typedef Case carte[TAILLE_MAX_CARTE];

/*! \struct Effet structures.h
 * \brief Definition de la structure Personnage.
 */
typedef struct {
    unsigned int nb_tours_restants;/*!< Le nombre de tours restants avant que l'effet ne s'estompe*/
    unsigned int valeur_degats_duree; /*!< Le nombre de degat de duree subit par tour*/
    unsigned int valeur_soin_duree; /*!< Le nombre PV regeneres par tour*/
    boolean paralysie; /*!< L'effet provoque ou non une paralysie*/
} Effet;

/*! \struct Attaque structures.h
 * \brief Definition de la structure Attaque.
 */
typedef struct {
    char nom[TAILLE_NOMS]; /*!< Nom de l'attaque de taille TAILLE_NOMS*/
    unsigned short int degats_directs; /*!< Degats direct occasionnes*/
    unsigned short int degats_permanents; /*!< Degats permanents occasionnes*/
    unsigned short int portee; /*!< Portee en nombre de cases de l'attaque*/
    Effet effets[]; /*!< Tableau des effets appliques par l'attaque*/
} Attaque;

/*! \struct Classe structures.h
 * \brief Definition de la structure Classe.
 */
typedef struct {
    char nom[TAILLE_NOMS]; /*!< Nom de la classe de taille TAILLE_NOMS*/
    Attaque* attaques; /*!< Les attaques disponibles pour la classe*/
    unsigned short int points_deplacement_max; /*!< Les PD maximums accordés a la classe*/
    unsigned short int PV_max; /*!< Les PV maximums accordés a la classe*/
    unsigned short int mana_max; /*!< Le mana maximum accordé a la classe*/
} Classe;

/*! \struct Personnage structures.h
 * \brief Definition de la structure Personnage.
 */
typedef struct {
    char nom[TAILLE_NOMS];/*!< Nom du personnage de taille TAILLE_NOMS*/
    Classe classe; /*!< La classe dont depend le personnage */
    unsigned short int points_deplacement; /*!< Les PD actuels du personnage*/
    unsigned short int PV; /*!< Les PV actuels du personnage*/
    unsigned short int mana; /*!< Le mana actuel du personnage*/
    Case *position; /*!< La case representant la position actuelle du personnage*/
    Effet effets[]; /*!< Un tableau d'effets representant les effets affectant le personnage*/
} Personnage;

/*! \struct Competence structures.h
 * \brief Definition de la structure Competence.
 *
 * Les competences sont representees sous forme d'arbre chaque
 * parent ayant 2 enfants.
 */
typedef struct Competence{
    unsigned short int id; /*!< Un entier qui represente la competence*/
    char nom[TAILLE_NOMS]; /*!< Nom de la competence de taille TAILLE_NOMS*/
    unsigned short int etage; /*!< Etage de la competence dans l'arbre*/
    struct competence *enfant_gauche; /*!< Pointeur vers le premier enfant de la competence*/
    struct competence *enfant_droit; /*!< Pointeur vers le deuxieme enfant de la competence*/
    struct effet_competence *effet; /*!< Pointeur vers les effets de la competence*/
    boolean connu; /*!< La competence est connue ou non*/
}Competence;

/*! \struct Effet_competence structures.h
 * \brief Definition de la structure effet_competence
 */
typedef struct Effet_competence{
    unsigned short int id; /*!< Un entier qui represente la competence*/
    char nom[TAILLE_NOMS]; /*!< Nom de la competence de taille TAILLE_NOMS*/
    /* effets à définir */

}Effet_competence;

/*! \struct Joueur structures.h
 * \brief Definition de la structure Joueur
 *
 * Un Joueur est compose principalement d'un nom et d'un tableau de Personnages.
 * Il reste a ajouter des attributs tels que l'arbre de competence.
 */
 typedef struct Joueur{
    char nomJoueur[TAILLE_NOMS]; /*!< Le nom identifiant le Joueur*/
    Personnage * groupe[TAILLE_MAX_GROUPE];/*!< Les personnages du joueur qui prennent part à la partie.*/
 } Joueur;

 /*! \struct NodeJoueur structures.h
 * \brief Definition de la structure NodeJoueur
 *
 * NodeJoueur est un noeud definit pour gerer une liste de Joueur
 */
 typedef struct NodeJoueur{
    Joueur * j; /*!< valeur du noeud*/
    struct NodeJoueur * next;/*!< Pointeur vers le noeud suivant*/
 } NodeJoueur;

/*! \struct ListJoueur structures.h
 * \brief Definition de la structure ListJoueur
 *
 * ListJoueur est une liste de noeuds pointant vers des Joueur
 */
 typedef struct ListJoueur{
    NodeJoueur * firstNodeJoueur; /*!<Premier noeud*/
    NodeJoueur * currentNodeJoueur; /*!<Noeud courant*/
    NodeJoueur * lastNodeJoueur; /*!<Dernier noeud*/
 }ListJoueur;

 /*! \struct Partie structures.h
 * \brief Definition de la structure Partie
 *
 * Contient les informations concernant la partie telles que la liste des joueurs participants
 * le nombre de tours. Cette structure permet de gérer les tours
 * Peut eventuellement contenir l'information Carte si c'est utile.
 */
 typedef struct Partie{
    ListJoueur participants; /*!< La liste de joueurs prennant parts à la partie*/
    int nbTours; /*!<Le nombre de tours actuel*/
 }Partie;

#endif