From cdf9c68e79a41f5f66b1c3d453cc5a76a466d8eb Mon Sep 17 00:00:00 2001 From: ColinDrieu <colin.drieu@insa-rennes.fr> Date: Fri, 6 May 2016 18:07:35 +0200 Subject: [PATCH] =?UTF-8?q?Code=20d'une=20fonction=20faisant=20l'interface?= =?UTF-8?q?=20entre=20la=20SDL=20et=20le=20moteur=20pour=20ajouter=20un=20?= =?UTF-8?q?Personnage=20=C3=A0=20la=20Partie=20=C3=A0=20partir=20d'une=20C?= =?UTF-8?q?lasse=20d=C3=A9finie=20dans=20le=20GamePackage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J'ai modifié la structure Personnage, le nom du Personnage est remplacé par un numéro, le nom dépend du nom de la Classe du Personnage. J'ai modifié init_personnage afin d'allouer l'espace en mémoire pour un personnage, et appellé init_personnage dans default_personnage. --- src/controleur.c | 51 +++++++++++++++++++++++++++++++++++++++++++++- src/controleur.h | 2 ++ src/personnage.c | 53 ++++++++++++++++++++++++++++++++---------------- src/personnage.h | 8 +++++++- src/structures.h | 2 +- 5 files changed, 96 insertions(+), 20 deletions(-) diff --git a/src/controleur.c b/src/controleur.c index 67895de..c593c4f 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 f1328e1..3410c3e 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 bbbf010..2eb67af 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 22f9cdc..e8c92e9 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 b439fd3..e5154c0 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*/ -- GitLab