Skip to content
Snippets Groups Projects
structures.h 9.60 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 160
/*! \def TAILLE_MAX_LIGNE */
#define TAILLE_MAX_LIGNE 25
/*! \def TAILLE_ID */
#define TAILLE_ID 20
/*! \def TAILLE_NOMS */
#define TAILLE_NOMS 25
/*! \def TAILLE_MAX_GROUPE */
#define TAILLE_MAX_GROUPE 3
/*! \def LARG_MAX_CARTE */
#define LARG_MAX_CARTE 16
/*! \def LONG_MAX_CARTE */
#define HAUT_MAX_CARTE 10
/*! \def TAILLE_CHEMIN */
#define TAILLE_CHEMIN 50

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

/*! \enum boolean
 * \brief Definition du type EtatsJeu.
 */
 /*
  * Les états du jeu sont basés sur le scénarion définit dans la documentation.
  * Il y en a éventuellement à ajouter ou à supprimer.
  * Je pense notament aux états JxPy attaque ou deplacement.
  * Il me semble que c'est un état différent à chaque fois, mais peut être qu'on peut
  * tout réunir dans l'état TOUR_JxPy. Dites moi ce que vous en pensez.
  * En tout cas les premiers états jusqu'à CONFIGURATION devraient permettre de rendre la V2.
  */
typedef enum    {SAISIE_JOUEURS,
                LANCEMENT,
                CONFIGURATION,
                TOUR_J1P1,
                J1P1_DEPLACEMENT,
                J1P1_ATTAQUE,
                TOUR_J1P2,
                J1P2_DEPLACEMENT,
                J1P2_ATTAQUE,
                TOUR_J1P3,
                J1P3_DEPLACEMENT,
                J1P3_ATTAQUE,
                TOUR_J2P1,
                J2P1_DEPLACEMENT,
                J2P1_ATTAQUE,
                TOUR_J2P2,
                J2P2_DEPLACEMENT,
                J2P2_ATTAQUE,
                TOUR_J2P3,
                J2P3_DEPLACEMENT,
                J2P3_ATTAQUE,
                VICTOIRE,
                FERMER
                }EtatsJeu;

/*! \struct Skins_Charac structures.h
 * \brief Definition de la structure Skins_Charac
 * sizeof(Skins_Charac) = 200 octets
 * Ensemble de noms de fichiers indiquant les textures des personnages
 */
 typedef struct Skins_Charac{
    char charac_default[50];
    char charac_selected[50];
    char charac_healed[50];
    char charac_damaged[50];
} Skins_Charac;

 typedef struct Skins_GUI{
    char id[50];
    char GUI_default[50];
} Skins_GUI;


/*! \struct Type_terrain structures.h
 * \brief Definition de la structure Type_terrain
 * sizeof(Terrain) = 28 octets
 */
typedef struct Terrain{
    char nomTerrain[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. */
    char skin_default[50];
}Terrain;

/*! \struct Case structures.h
 * \brief Definition de la structure Case
 * sizeof(Case) = 12 octets
 */
typedef struct Case{
    unsigned short int coord_x; /*!< Abscisse de la case*/
    unsigned short int coord_y; /*!< Ordonnee de la case*/
    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_Jeu
 * La Carte_Jeu est composée d'un identifiant et d'un tableau de Case à deux entrées.
 */
typedef struct Carte_Jeu{
    char id[TAILLE_ID]; /*!< ID de la Carte_Jeu de taille TAILLE_ID*/
    Case Tab_Cases[LARG_MAX_CARTE][HAUT_MAX_CARTE];/*!< Double tableau de Case de largeur LARG_MAX_CARTE et de hauteur HAUT_MAX_CARTE*/
}Carte_Jeu;

/*! \typedef Carte structures.h
 * \brief Definition du type Carte
 * sizeof(Carte) = 3072 octets
 * 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 Effet.
 * sizeof(Effet) = 48 octets
 */
typedef struct Effet{
    char id[TAILLE_ID]; /*!< ID de l'effet de taille TAILLE_ID*/
    char nom[TAILLE_NOMS]; /*!< Nom de l'effet de taille TAILLE_NOMS*/
    unsigned int nb_tours;/*!< Le nombre de tours restant avant que l'effet ne s'estompe*/
    unsigned int valeur_degats; /*!< Le nombre de degats subis */
    unsigned int valeur_soin; /*!< Le nombre PV regeneres */
    unsigned int valeur_degats_duree; /*!< Le nombre de degats de duree subis par tour*/
    unsigned int valeur_soin_duree; /*!< Le nombre PV regeneres par tour*/
    unsigned int paralysie; /*!< L'effet provoque ou non une paralysie*/
} Effet;

/*! \struct Attaque structures.h
 * \brief Definition de la structure Attaque.
 sizeof(Attaque) = 268 octets
 */
typedef struct Attaque{
    char id[TAILLE_ID];
    char nom[TAILLE_NOMS]; /*!< Nom de l'attaque de taille TAILLE_NOMS*/
    unsigned short int mana;
    unsigned short int portee; /*!< Portee en nombre de cases de l'attaque*/
    Effet effets[5]; /*!< Tableau des effets appliques par l'attaque, cela comprend les dégâts de duree*/
} Attaque;

/*! \struct Classe structures.h
 * \brief Definition de la structure Classe.
 * sizeof(Classe) = 1576 octets
 */
typedef struct Classe{
    char nom[25]; /*!< Nom de la classe de taille TAILLE_NOMS*/
    Attaque attaques[5]; /*!< 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*/
    Skins_Charac skins;
}Classe;

/*! \struct Personnage structures.h
 * \brief Definition de la structure Personnage.
 * sizeof(Personnage) = 32 octets
 */
typedef struct Personnage{
    char nomPersonnage[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.
 * sizeof(Competence) = 44 octets
 */


typedef struct Competence{
    char nomComp[TAILLE_NOMS]; /*!< Nom de la competence de taille TAILLE_NOMS*/
    char id[TAILLE_ID];   /*!< Un entier qui represente la competence*/
    unsigned int prix_competence; /*!< Points a depenser pour acquerir la competence */
    struct Competence *enfant; /*!< Premier enfant de la competence */
    struct Competence *frere; /*!< Competence suivante sur le meme niveau */
    struct Effet_Competence *effet;  /*!< Pointeur vers les effets de la competence */
    unsigned int connu; /*!< La competence est connue ou non */
}Competence;


/*! \struct Effet_Competence structures.h
 * \brief Definition de la structure Effet_Competence
 * sizeof(Effet_Competence) = 18 octets
 */
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*/
/* ........ */
} Effet_Competence;


typedef struct Carte_A{
    char id[TAILLE_ID];
    char nom[50];
    char desc[100];
    char lignes[LARG_MAX_CARTE+1][HAUT_MAX_CARTE+1];
} Carte_A;



/*! \struct Classe structures.h
 * \brief Definition de la structure Game_Package
 * sizeof(Classe) =
 */
typedef struct Game_Package{
    int nbCartes;
    int nbClasses;
    Classe* Classes_Package;
    Terrain* Terrains_Package;
    Skins_GUI* GUI_Package;
    Carte_A* Cartes_Package;
    Competence* Competences_Package;
}Game_Package;



/*! \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.
 * sizeof(Joueur) = 28 octets
 */
 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
 * sizeof(NodeJoueur) = 8 octets
 * NodeJoueur est un noeud defini 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
 * sizeof(ListJoueur) = 12 octets
 * 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.
 * sizeof(Partie) = 12 octets
 */

typedef struct Partie{
    ListJoueur * participants; /*!< La liste de joueurs prennant parts à la partie*/
    int nbTours; /*!<Le nombre de tours actuel*/
    Carte_Jeu * c; /*!<La Carte associee a la Partie*/
 }Partie;

#endif