diff --git a/src/controleur.c b/src/controleur.c index 67895debfc13a6e1649db8f08098641754a620bd..c593c4f5e0c49fc4a0835f4157c9ef7d66bec7a8 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -5,6 +5,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "partie.h" #include "joueur.h" @@ -177,7 +178,7 @@ char ** obtenirDescriptionCarte(){ * \fn void freeCartes() * \brief La fonction libère un tableau de chaines de charactères alloué pour stocker les informations sur la carte. * - * \param + * \param le tableau de charactères à supprimmer. */ void freeCartes(char ** tab){ int i; @@ -187,6 +188,54 @@ char ** obtenirDescriptionCarte(){ free(tab); } + /*! + * \fn int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur) + * \brief La fonction ajoute un personnage au tableau de personnages d'un Joueur à l'indice numTab(compris entre 0 et TAILLE_MAX_GROUPE). + * S'il y a déjà un personnage à l'indice numTab, l'ancien personnage est effacé du tableau. + * + * \param le nom de la classe dont dépend le Personnage, numTab un entier représentant l'indice auquel ajouter le Personnage dans le table de personnages, + * numJoueur est un entier représentant le premier ou le second Joueur de la Partie. + * \return 1 si le Personnage a été correctement ajouté, 0 sinon. + */ +int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){ + int i; + i=0; + //Recherche de la classe dans le Package + while((strcmp(nomClasse,(packGlobal.Classes_Package[i].nom))!=0)&&(i<=nbClasses())){ + i++; + } + if(i>nbClasses()){ + return 0; + } + //Création du personnage + Personnage * p = default_personnage(i,packGlobal); + + //Ajout du Personnage à l'équipe du Joueur + switch (numJoueur){ + case 1: + setOnFirstJoueur(partieGlobale->participants); + break; + case 2: + setOnFirstJoueur(partieGlobale->participants); + nextJoueur(partieGlobale->participants); + break; + default: + return 0; + } + + if((numTab<TAILLE_MAX_GROUPE)&&(numTab>=0)){ + setNumero(p,numTab); + addPersonnage(getCurrentJoueur(partieGlobale->participants),p,numTab); + return 1; + } + else{ + return 0; + } + + + +} + diff --git a/src/controleur.h b/src/controleur.h index f1328e1f5f455cd6d272d06c7c7f5dbf56379155..3410c3e69ae929f0e6fe2d6e0f4492bbe3845d23 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -22,6 +22,8 @@ char ** obtenirNomsCartes(); char ** obtenirDescriptionCarte(); void freeCartes(char **); +void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur); + #endif // CONTROLEUR_H diff --git a/src/personnage.c b/src/personnage.c index bbbf010012ecf2e4021b3c175ebe60b18ce7a05a..2eb67af6ee04c54cdefe1c6a8397c26d5ea976dc 100644 --- a/src/personnage.c +++ b/src/personnage.c @@ -17,8 +17,10 @@ * \param Un personnage. * \return Un personnage initialisé. */ -Personnage* init_personnage(Personnage *perso) +Personnage* init_personnage() { + Personnage * perso = malloc(sizeof(Personnage)); + perso->numero=-1; perso->classe=NULL; perso->points_deplacement=0; perso->PV=0; @@ -51,16 +53,47 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) * \fn Personnage* default_personnage(int numero, Game_Package Pack) * \brief La fonction construit un personnage par default, a partir de ses caracteristiques dans le fichier Classes.xml * - * \param Un personnage, un game_package. + * \param Le numéro de la défination du personnage dans le fichier XML, un game_package. * \return Un personnage pret a l'action. */ Personnage* default_personnage(int numero, Game_Package Pack) { - Personnage* Perso; + Personnage* Perso = init_personnage(); set_personnage(Perso, &Pack.Classes_Package[numero], NULL); return Perso; } +/*! + * \fn void freePersonnage(Personnage * p) + * \brief libère l'espace mémoire alloué à un personnage. + * + * \param un pointeur vers le personnage à supprimmer. + */ +void freePersonnage(Personnage * p){ + free(p); +} + +/*! + * \fn void setNumero(Personnage * p, int n) + * \brief Initialise le numéro d'un Personnage. + + * \param Un pointeur vers le Personnage à modifier, un int déterminant son numéro. + */ + void setNumero(Personnage * p, int n){ + p->numero = n; + } + + /*! + * \fn int getNumero(Personnage * p) + * \brief La fonction renvoie le numéro du personnage. + * + * \param Un pointeur vers le Personnage à tester. + * \return un entier vers le numéro du personnage. + */ + int getNumero(Personnage * p){ + return p->numero; + } + /*! * \fn Classe * getClasse(Personnage *p) * \brief La fonction renvoie la classe d'un personnage. @@ -148,18 +181,4 @@ int estSurLaCase(Personnage * p, Case * c){ return c==getPosition(p); } -/*! - * \fn char * getNomPersonnage(Personnage * p) - * \brief La fonction renvoie le nom d'un Personnage. - * - * \param Le Personnage a tester. - * \return un pointeur vers la chaine de caractere representant le nom du Personnage, NULL si l'entree est NULL. - */ -char * getNomPersonnage(Personnage * p){ - if(p!=NULL){ - return p->nomPersonnage; - } - return NULL; -} - diff --git a/src/personnage.h b/src/personnage.h index 22f9cdce99bf3be565eb75e48902b5e518891d8d..e8c92e9fea01cc87cecd01addb661799cbd580e5 100644 --- a/src/personnage.h +++ b/src/personnage.h @@ -8,10 +8,16 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart); -Personnage* init_personnage(Personnage *perso); +Personnage* init_personnage(); Personnage* default_personnage(int numero, Game_Package Pack); +void freePersonnage(Personnage * p); + +void setNumero(Personnage * p, int n); + +int getNumero(Personnage * p); + Case* getPosition(Personnage *p); int get_PV(Personnage *p); diff --git a/src/structures.h b/src/structures.h index b439fd36324708792f4337370ff3dd22edb95609..e5154c023757f5e4e85b05056e6990cf108cd92a 100644 --- a/src/structures.h +++ b/src/structures.h @@ -180,7 +180,7 @@ typedef struct Classe{ * sizeof(Personnage) = 32 octets */ typedef struct Personnage{ - char nomPersonnage[TAILLE_NOMS];/*!< Nom du personnage de taille TAILLE_NOMS*/ + int numero; 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*/