#include <stdio.h> #include <stdlib.h> #include "structures.h" #include "case.h" #include "personnage.h" #include "deplacements.h" /*! * \file personnage.c * \brief Fichier contenant le code des fonctions liees aux personnages. */ /*! * \fn Personnage* init_personnage(Personnage *perso) * \brief La fonction initialise un Personnage. * * \param Un personnage. * \return Un personnage initialis�. */ Personnage* init_personnage() { Personnage * perso = malloc(sizeof(Personnage)); perso->numero=-1; perso->classe=NULL; perso->points_deplacement=0; perso->PV=0; perso->mana=0; perso->position=NULL; return perso; } /*! * \fn Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)) * \brief La fonction initialise un Personnage. * * \param Un personnage. * \return Un personnage initialis�. */ Personnage* set_personnage(Personnage *perso, Classe *c) { perso->classe=c; if(c!=NULL){ perso->points_deplacement=c->points_deplacement_max; perso->PV=c->PV_max; perso->mana=c->mana_max; } perso->position=NULL; return perso; } /*! * \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 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 = init_personnage(); set_personnage(Perso, &Pack.Classes_Package[numero]); 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. * * \param Un personnage. * \return une classe. */ Classe * getClasse(Personnage *p){ return p->classe; } /*! * \fn Case * getPosition(Personnage *p) * \brief La fonction renvoie la position d'un personnage. * * \param Un personnage. * \return une position. */ Case * getPosition(Personnage *p){ return p->position; } /*! * \fn void setPosition(Personnage *p) * \brief La fonction initialise la position d'un personnage. * * \param Un personnage. */ void setPosition(Personnage * p, Case * c){ p->position=c; marquer_occupee(c); } /*! * \fn Classe * get_PV(Personnage *p) * \brief La fonction renvoie les points de vie d'un personnage. * * \param Un personnage. * \return un entier. */ int get_PV(Personnage *p){ return p->PV; } /*! * \fn Classe * get_mana(Personnage *p) * \brief La fonction renvoie les points de mana d'un personnage. * * \param Un personnage. * \return un entier. */ int get_mana(Personnage *p){ return p->mana; } /*! * \fn Classe * get_PD(Personnage *p) * \brief La fonction renvoie les points de vie d'un personnage. * * \param Un personnage. * \return un entier. */ int get_PD(Personnage *p){ return p->points_deplacement; } /* Cette fonction ne fonctionne plus, il faut une fonction qui accede aux effets. boolean est_paralyse(Personnage *p){ return p->paralyse; } */ /*! * \fn deplacer_personnage (Personnage *perso, Case *destination) * \brief La fonction deplace un personnage. * * \param Un personnage, une case. * \return un entier. */ int deplacer_personnage (Personnage *perso, Case *destination){ /*d�place un personnage d'une case � une autre. Ne v�rifie pas si le d�placement est autoris�, cela doit �tre fait par la fonction qui l'appelle*/ marquer_libre(getPosition(perso)); perso->position=destination; marquer_occupee(getPosition(perso)); if(getPosition(perso)==destination) return 0; return 1; } /*! * \fn int estSurLaCase(Personnage * p, Case * c) * \brief La fonction teste si un Personnage est sur une Case. * * \param Le Personnage et la Case a tester. * \return 1 si le Personnage est sur la Case, 0 sinon. */ int estSurLaCase(Personnage * p, Case * c){ return c==getPosition(p); }