diff --git a/src/controleur.c b/src/controleur.c index 82882ab347f641c8fd8a54a8a5bd4664c4ed0e9b..8aa77c1ffe8eb96cda83244c40d6042765935c9f 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -384,7 +384,7 @@ char * obtenirRessourcePersonnage(int x, int y){ } } } - //recherche du Personnage sur la case pour le premier Joueur. + //recherche du Personnage sur la case pour le second Joueur. nextJoueur(getListJoueur(partieGlobale)); for(i=0;i<TAILLE_MAX_GROUPE;i++){ if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){ @@ -396,14 +396,90 @@ char * obtenirRessourcePersonnage(int x, int y){ } } //Si aucun personnage trouvé. + setOnJoueur(getListJoueur(partieGlobale),actuel); return NULL; } } + /*! + * \fn Personnage * trouverPersonnage(Case * c) + * \brief La fonction renvoie un pointeur vers le personnage présent sur la case en parrammetre. + * + * \param Les coordonnées de la Case à tester + * \return Un pointeur vers un personnage, NULL, s'il n'y a pas de personnage sur la case. + */ +Personnage * trouverPersonnage(Case * c){ + int i; + Personnage * resultat; + resultat = NULL; + Joueur * actuel = NULL; + actuel = getCurrentJoueur(getListJoueur(partieGlobale)); + if(!est_occupee(c)){ + return resultat; + } + setOnFirstJoueur(getListJoueur(partieGlobale)); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(c==getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i))){ + resultat = getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i); + setOnJoueur(getListJoueur(partieGlobale),actuel); + return resultat; + } + } + nextJoueur(getListJoueur(partieGlobale)); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(c==getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i))){ + resultat = getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i); + setOnJoueur(getListJoueur(partieGlobale),actuel); + return resultat; + } + } + setOnJoueur(getListJoueur(partieGlobale),actuel); + return NULL; +} + + /*! + * \fn char * obtenirNomClassePersonnage(int numero) + * \brief La fonction renvoie le nom de la classe du Personnage en parrametre. + * Le numero correspond au placement du personnage tel qu'il est définit dans la sdl et va de 1 à 6 : + * Exemples : Le Personnage 0 du joueur 2 dans le moteur correspond au numero 4 pour la sdl. + * Le Personnage 1 du joueur 1 dans le moteur correspond au numero 2 pour la sdl. + * + * \param Le numero du personnage pour la SDL. + * \return Un char * vers le nom de la classe du Personnage. + */ +char * obtenirNomClassePersonnage(int numero){ + Joueur * actuel = NULL; + actuel = getCurrentJoueur(getListJoueur(partieGlobale)); + char * nomClasse; + nomClasse = malloc(TAILLE_NOMS*sizeof(char)); + + if ((numero>0)&&(numero<=3)){ + setOnFirstJoueur(getListJoueur(partieGlobale)); + nomClasse = getNomClasse(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numero-1))); + setOnJoueur(getListJoueur(partieGlobale),actuel); + return nomClasse; + } + else if ((numero>3)&&(numero<=6)){ + setOnFirstJoueur(getListJoueur(partieGlobale)); + nextJoueur(getListJoueur(partieGlobale)); + nomClasse = getNomClasse(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numero-4))); + setOnJoueur(getListJoueur(partieGlobale),actuel); + return nomClasse; + } +} + +int obtenirPVPersonnage(int numero); +int obtenirPVMaxPersonnage(int numero); +int obtenirManaPersonnage(int numero); +int obtenirManaMaxPersonnage(int numero); +int obtenirPDPersonnage(int numero); +int obtenirPDMaxPersonnage(int numero); +char ** obtenirNomsAttaquesPersonnage(int numero); + // Je met ici mes tests réalisés dans le main pour éviter de les réécrire si jamais il y a un problème. // Si vous voulez tester aussi, à recopier dans le main avant l'appel à initJeu(). void testControlleurConsole(){ - int i,j; + int i,j,n; EtatsJeu state = SAISIE_JOUEURS; extern Partie * partieGlobale; extern Game_Package packGlobal; @@ -437,7 +513,20 @@ void testControlleurConsole(){ for(i=0;i<LARG_MAX_CARTE;i++){ for(j=0;j<HAUT_MAX_CARTE;j++){ - printf("%s : Position : %d/%d\n",obtenirRessourcePersonnage(i,j),i,j); + if(personnagePresent(i,j)){ + printf("Position : %d/%d\n%s\n",i,j,obtenirRessourcePersonnage(i,j)); + /* Attention pour ce qui suit: l'acces aux informations sera moins "compliqué" hors des tests + car la SDL "connait" le numero quelle a attribuée aux personnages. + Ici, c'était une manière de simuler l'acces aux données mais depuis le moteur. + */ + if((appartientJoueur(trouverPersonnage(getCase(getCarte(partieGlobale),i,j)),partieGlobale))==(getListJoueur(partieGlobale)->firstNodeJoueur->j)){ + n=1+getIndicePersonnage((getListJoueur(partieGlobale)->firstNodeJoueur->j),trouverPersonnage(getCase(getCarte(partieGlobale),i,j))); + } + else{ + n=4+getIndicePersonnage((getListJoueur(partieGlobale)->lastNodeJoueur->j),trouverPersonnage(getCase(getCarte(partieGlobale),i,j))); + } + printf("%s\n", obtenirNomClassePersonnage(n)); + } } } diff --git a/src/controleur.h b/src/controleur.h index 26415eab3f7691536effafb907e65ed64f2487a1..7a9befaa816c4849807adf99ee08c2048f792be7 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -37,6 +37,17 @@ char * ObtenirRessourceTerrain(int x, int y); int personnagePresent(int x, int y); char * obtenirRessourcePersonnage(int x, int y); +Personnage * trouverPersonnage(Case * c); + +char * obtenirNomClassePersonnage(int numero); +int obtenirPVPersonnage(int numero); +int obtenirPVMaxPersonnage(int numero); +int obtenirManaPersonnage(int numero); +int obtenirManaMaxPersonnage(int numero); +int obtenirPDPersonnage(int numero); +int obtenirPDMaxPersonnage(int numero); +char ** obtenirNomsAttaquesPersonnage(int numero); + void testControlleurConsole(); #endif // CONTROLEUR_H diff --git a/src/joueur.h b/src/joueur.h index 6e6cd836d0b37e1f0d001ac3f269b57441c747d7..efc2f113d7a84d45d13d8ebb7665a67979db1147 100644 --- a/src/joueur.h +++ b/src/joueur.h @@ -15,6 +15,7 @@ char * getNomJoueur(Joueur * j); void setNomJoueur(Joueur * j, char * nom); Personnage * getPersonnage(Joueur * j, int i); +int getIndicePersonnage(Joueur * j, Personnage * p); int addPersonnage(Joueur * j, Personnage * p, int i); int isInGroupe(Joueur * j, Personnage * p); int removePersonnage(Joueur * j, Personnage * p); diff --git a/src/partie.c b/src/partie.c index 7db6e8238f6aa269e1c8594d431de1d66a43f0c2..2a6eb3d37b170ea6714e299c7637b8b9ce3af2a8 100644 --- a/src/partie.c +++ b/src/partie.c @@ -10,6 +10,7 @@ #include "joueurList.h" #include "joueur.h" #include "case.h" +#include "personnage.h" /*! * \fn Partie * initPartie()