diff --git a/src/joueur.c b/src/joueur.c new file mode 100644 index 0000000000000000000000000000000000000000..58c5f362254ebc2f145207d8780d6f68050a4812 --- /dev/null +++ b/src/joueur.c @@ -0,0 +1,141 @@ +/*! +* \file joueur.c +* \brief Fichier contenant le code des fonctions liees a la structure Joueur. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "structures.h" +#include "joueur.h" + +/*! + * \fn Joueur * nouveauJoueur() + * \brief La fonction cree un nouveau Joueur. + * + * \return Un pointeur vers le joueur cree. + */ +Joueur * nouveauJoueur(){ + int i; + Joueur * j = malloc(sizeof(Joueur)); + j->nomJoueur[0]='\0'; + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + j->groupe[i]=NULL; + } + return j; +} + +/*! + * \fn void deleteJoueur(Joueur * j) + * \brief La fonction supprime un Joueur et libere l'espace alloue en memoire. + * + * \param Un pointeur vers le Joueur a supprimer. + */ +void deleteJoueur(Joueur * j){ + free(j); +} + +/*! + * \fn char * getNomJoueur(Joueur * j) + * \brief La fonction renvoie le pointeur vers la chaine de caractere contenant le nom du Joueur. + * + * \param Un pointeur vers le Joueur a tester. + * \return un pointeur vers la chaine de caracteres contenant le nom, + */ +char * getNomJoueur(Joueur * j){ + return (j->nomJoueur); +} + +/*! + * \fn void setNomJoueur(Joueur * j, char * nom) + * \brief La fonction change le nom du Joueur en parametre a la valeur d'entree. + * + * \param Un pointeur vers le Joueur a modifier. + */ +void setNomJoueur(Joueur * j, char * nom){ + strncpy(j->nomJoueur,nom,TAILLE_NOMS-1); + j->nomJoueur[TAILLE_NOMS-1]='\0'; +} + +/*! + * \fn Personnage * getPersonnage(Joueur * j, int i) + * \brief La fonction renvoie le pointeur du personnage a l'indice i du groupe du Joueur en entree. + * + * \param Un pointeur vers le Joueur a tester, l'indice a tester dans le tableau groupe. + * \return Un pointeur vers le Personnage du Joueur a l'indice i dans le tableau groupe, NULL si l'indice n'est pas dans le tableau. + */ +Personnage * getPersonnage(Joueur * j, int i){ + if(i<TAILLE_MAX_GROUPE-1){ + return j->groupe[i]; + } + return NULL; +} + +/*! + * \fn int addPersonnage(Joueur * j, Personnage * p, int i) + * \brief La fonction stocke un Personnage a l'indice i du tableau groupe du Joueur en parrametre. + * Si le tableau est deja rempli a cet indice, la valeur precedente est effacee du tableau. + * + * \param Un pointeur vers le Joueur a modifier, l'indice du tableau groupe ou faire la modification, le Personnage a ajouter. + * \return 1 si le Personnage a ete correctement ajoute, 0 si l'indice n'est pas dans le tableau groupe. + */ +int addPersonnage(Joueur * j, Personnage * p, int i){ + if(i<TAILLE_MAX_GROUPE){ + j->groupe[i]=p; + return 1; + } + return 0; +} + +/*! + * \fn int isInGroupe(Joueur * j, Personnage * p) + * \brief La fonction teste si le Personnage en parrametre est dans le groupe du Joueur. + * + * \param Un pointeur vers le Joueur et le personnage a tester. + * \return 1 si le Personnage est dans le groupe du joueur, 0 sinon. + */ +int isInGroupe(Joueur * j, Personnage * p){ + int i; + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(j->groupe[i]==p){ + return 1; + } + } + return 0; +} + +/*! + * \fn getIndicePersonnage(Joueur * j, Personnage * p) + * \brief La fonction renvoie l'indice auquel est stocke le Personnage en parrametre dans le groupe du Joueur. + * + * \param Un pointeur vers le Joueur et le personnage a tester. + * \return La valeur de l'indice auquel le Personnage est stocke, -1 s'il n'est pas dans le groupe du Joueur. + */ +int getIndicePersonnage(Joueur * j, Personnage * p){ + int i; + if(isInGroupe(j,p)){ + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(j->groupe[i]==p){ + return i; + } + } + } + return -1; +} + +/*! + * \fn int removePersonnage(Joueur * j, Personnage * p) + * \brief La fonction retire le Personnage du groupe du Joueur. + * Si le Personnage n'est pas dans le groupe du Joueur, elle ne fait rien. + * + * \param Un pointeur vers le Joueur a modifier, le Personnage a retirer. + * \return 1 si le Personnage a ete retire, 0 si le personnage n'est pas dans le tableau groupe. + */ +int removePersonnage(Joueur * j, Personnage * p){ + int i=getIndicePersonnage(j,p); + if(i>=0){ + j->groupe[i]=NULL; + return 1; + } + return 0; +} diff --git a/src/joueur.h b/src/joueur.h index 6cf909b190b40c4fd4a6a8774af5333f18bc266c..478e65c3229bef5d5d8a1125939de0b388326bab 100644 --- a/src/joueur.h +++ b/src/joueur.h @@ -9,16 +9,17 @@ #define JOUEUR_H Joueur * nouveauJoueur(); -int initJoueur(Joueur * j, char * nom); void deleteJoueur(Joueur * j); -char getNomJoueur(Joueur * j); -char setNomJoueur(Joueur * j, char * nom); +char * getNomJoueur(Joueur * j); +void setNomJoueur(Joueur * j, char * nom); Personnage * getPersonnage(Joueur * j, int i); -int addPersonnage(Joueur * j, Personnage * p); +int addPersonnage(Joueur * j, Personnage * p, int i); +int isInGroupe(Joueur * j, Personnage * p); int removePersonnage(Joueur * j, Personnage * p); -int appartientJoueur(Joueur * j, Personnage * p); +// Des Fonctions sont a ajouter pour les versions suivantes pour la gestion des competences du Joueur +// et eventuellement pour sa sauvegarde. #endif // JOUEUR_H diff --git a/src/joueurList.c b/src/joueurList.c index 3b9a34fa888f4d2927c01da50a2a47f3c2f9cf54..f4090ae5b3ad12d45132b1e68c04adaa4db528e6 100644 --- a/src/joueurList.c +++ b/src/joueurList.c @@ -1,6 +1,6 @@ /*! * \file joueurList.c -* \brief Fichier contenant le code des fonctions liees a la structure Partie. +* \brief Fichier contenant le code des fonctions liees aux structures NodeJoueur et ListJoueur. */ #include <stdio.h>