Skip to content
Snippets Groups Projects
Commit cdf9c68e authored by ColinDrieu's avatar ColinDrieu
Browse files

Code d'une fonction faisant l'interface entre la SDL et le moteur

pour ajouter un Personnage à la Partie à partir d'une Classe définie
dans le GamePackage.

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.
parent aa85ea5a
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include "partie.h" #include "partie.h"
#include "joueur.h" #include "joueur.h"
...@@ -177,7 +178,7 @@ char ** obtenirDescriptionCarte(){ ...@@ -177,7 +178,7 @@ char ** obtenirDescriptionCarte(){
* \fn void freeCartes() * \fn void freeCartes()
* \brief La fonction libère un tableau de chaines de charactères alloué pour stocker les informations sur la carte. * \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){ void freeCartes(char ** tab){
int i; int i;
...@@ -187,6 +188,54 @@ char ** obtenirDescriptionCarte(){ ...@@ -187,6 +188,54 @@ char ** obtenirDescriptionCarte(){
free(tab); 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;
}
}
......
...@@ -22,6 +22,8 @@ char ** obtenirNomsCartes(); ...@@ -22,6 +22,8 @@ char ** obtenirNomsCartes();
char ** obtenirDescriptionCarte(); char ** obtenirDescriptionCarte();
void freeCartes(char **); void freeCartes(char **);
void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur);
#endif // CONTROLEUR_H #endif // CONTROLEUR_H
...@@ -17,8 +17,10 @@ ...@@ -17,8 +17,10 @@
* \param Un personnage. * \param Un personnage.
* \return Un personnage initialis. * \return Un personnage initialis.
*/ */
Personnage* init_personnage(Personnage *perso) Personnage* init_personnage()
{ {
Personnage * perso = malloc(sizeof(Personnage));
perso->numero=-1;
perso->classe=NULL; perso->classe=NULL;
perso->points_deplacement=0; perso->points_deplacement=0;
perso->PV=0; perso->PV=0;
...@@ -51,16 +53,47 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) ...@@ -51,16 +53,47 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)
* \fn Personnage* default_personnage(int numero, Game_Package Pack) * \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 * \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 numro de la dfination du personnage dans le fichier XML, un game_package.
* \return Un personnage pret a l'action. * \return Un personnage pret a l'action.
*/ */
Personnage* default_personnage(int numero, Game_Package Pack) Personnage* default_personnage(int numero, Game_Package Pack)
{ {
Personnage* Perso; Personnage* Perso = init_personnage();
set_personnage(Perso, &Pack.Classes_Package[numero], NULL); set_personnage(Perso, &Pack.Classes_Package[numero], NULL);
return Perso; return Perso;
} }
/*!
* \fn void freePersonnage(Personnage * p)
* \brief libre l'espace mmoire 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 numro d'un Personnage.
* \param Un pointeur vers le Personnage modifier, un int dterminant son numro.
*/
void setNumero(Personnage * p, int n){
p->numero = n;
}
/*!
* \fn int getNumero(Personnage * p)
* \brief La fonction renvoie le numro du personnage.
*
* \param Un pointeur vers le Personnage tester.
* \return un entier vers le numro du personnage.
*/
int getNumero(Personnage * p){
return p->numero;
}
/*! /*!
* \fn Classe * getClasse(Personnage *p) * \fn Classe * getClasse(Personnage *p)
* \brief La fonction renvoie la classe d'un personnage. * \brief La fonction renvoie la classe d'un personnage.
...@@ -148,18 +181,4 @@ int estSurLaCase(Personnage * p, Case * c){ ...@@ -148,18 +181,4 @@ int estSurLaCase(Personnage * p, Case * c){
return c==getPosition(p); 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;
}
...@@ -8,10 +8,16 @@ ...@@ -8,10 +8,16 @@
Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart); 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); 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); Case* getPosition(Personnage *p);
int get_PV(Personnage *p); int get_PV(Personnage *p);
......
...@@ -180,7 +180,7 @@ typedef struct Classe{ ...@@ -180,7 +180,7 @@ typedef struct Classe{
* sizeof(Personnage) = 32 octets * sizeof(Personnage) = 32 octets
*/ */
typedef struct Personnage{ typedef struct Personnage{
char nomPersonnage[TAILLE_NOMS];/*!< Nom du personnage de taille TAILLE_NOMS*/ int numero;
Classe* classe; /*!< La classe dont depend le personnage */ Classe* classe; /*!< La classe dont depend le personnage */
unsigned short int points_deplacement; /*!< Les PD actuels du personnage*/ unsigned short int points_deplacement; /*!< Les PD actuels du personnage*/
unsigned short int PV; /*!< Les PV actuels du personnage*/ unsigned short int PV; /*!< Les PV actuels du personnage*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment