From 6586b55652b00851dce37107398f704e0bb114ac Mon Sep 17 00:00:00 2001 From: ColinDrieu <colin.drieu@insa-rennes.fr> Date: Thu, 12 May 2016 14:44:33 +0200 Subject: [PATCH] =?UTF-8?q?Code=20d'une=20premiere=20fonction=20pour=20obt?= =?UTF-8?q?enir=20les=20caract=C3=A9ristiques=20d'un=20personnage=20depuis?= =?UTF-8?q?=20la=20SDL=20via=20le=20controleur.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correction d'oublis dans les fichiers joueurs.h et partie.c --- src/controleur.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++-- src/controleur.h | 11 ++++++ src/joueur.h | 1 + src/partie.c | 1 + 4 files changed, 105 insertions(+), 3 deletions(-) diff --git a/src/controleur.c b/src/controleur.c index 82882ab..8aa77c1 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 26415ea..7a9befa 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 6e6cd83..efc2f11 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 7db6e82..2a6eb3d 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() -- GitLab