From d733b3ff8f4f79195dec418505a443438b68d7a1 Mon Sep 17 00:00:00 2001 From: ColinDrieu <colin.drieu@insa-rennes.fr> Date: Thu, 12 May 2016 11:18:19 +0200 Subject: [PATCH] Code de fonctions permettant d'obtenir les ressources pour afficher la carte. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La fonction testControlleurConsole me permet de tester les fonctions, elle peut aussi être un exemple d'utilisation des fonctions. --- src/controleur.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++- src/controleur.h | 5 ++ 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/src/controleur.c b/src/controleur.c index 07b8e0b..8f2ca41 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -192,7 +192,7 @@ char ** obtenirDescriptionCarte(){ } /*! - * \fn Case * trouverCase(Carte c, int x, int y) + * \fn Case * trouverCase(Carte_Jeu * c, int x, int y) * \brief La fonction retourne un pointeur vers la case de coordonnées x,y * * \param les coordonnées x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilisée @@ -256,7 +256,6 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){ * \fn int selectionnerCarte(char * nomCarte) * \brief La fonction ajoute la Carte dont le nom est en parrametre à la Partie. * Les Terrains de la Carte sont initialisé à partir des cartes décrites en XML - * Les Personnages sont placés à leur position de départ sur la carte. * * \param Le nom de la Carte décrite en XML. * \return 1 si la carte est correctement initialisée, 0 sinon. @@ -279,6 +278,11 @@ int selectionnerCarte(char * nomCarte){ return 1; } + /*! + * \fn void initPositions() + * \brief La fonction initialise les positions des personnages sur la Carte. + * La carte de jeu doit être initialisée avant l'appel à cette fonction. + */ void initPositions(){ // Positionnement des Personnages sur la Carte_Jeu. int i; @@ -294,6 +298,125 @@ void initPositions(){ } } + /*! + * \fn char * ObtenirRessourceTerrain(int x, int y) + * \brief La fonction teste le type d'un Terrain aux coordonnées données et renvoie la ressource à afficher. + * L'utilisation de cette fonction pourrait se faire dans une boucle dans la SDL pour afficher la carte Case par Case. + * Il est d'abbord nécessaire de convertir les coordonnées "pixels" en coordonnées de cases de jeu. + * La carte doit être initialisées avant l'appel à cette fonction. + * + * \param Les coordonnées de la Case à tester + * \return un char * vers la ressource du Terrain de la case. + */ +char * ObtenirRessourceTerrain(int x, int y){ + return get_terrain(trouverCase(getCarte(partieGlobale),x,y))->skin_default; +} + + /*! + * \fn int personnagePresent(int x, int y) + * \brief La fonction teste si un Personnage est présent aux coordonnées à tester. + * Les coordonnées doivent être convertir des "pixels" de la SDL en Cases de Jeu. + * + * \param Les coordonnées de la Case à tester + * \return 1 si un Personnage est présent aux coordonnées, 0 sinon. + */ +int personnagePresent(int x, int y){ + return est_occupee(trouverCase(getCarte(partieGlobale),x,y)); +} + + /*! + * \fn char * obtenirRessourcePersonnage(int x, int y) + * \brief La fonction renvoie la ressource d'un Personnage présent aux coordonnées. + * + * \param Les coordonnées de la Case à tester + * \return la ressource du personnage sur la case, NULL s'il n'y a pas de personnage sur la case ou si le Personnage n'est pas trouvé. + */ +char * obtenirRessourcePersonnage(int x, int y){ + int i; + Joueur * actuel = NULL; + char * ressource = malloc(TAILLE_CHEMIN*sizeof(char)); + ressource = NULL; + //Test Personnage sur la case. + if(!personnagePresent(x,y)){ + return NULL; + } + + else{ + //sauvegarde du Joueur dont c'est le tour. + actuel = getCurrentJoueur(getListJoueur(partieGlobale)); + //recherche du Personnage sur la case pour le premier Joueur. + setOnFirstJoueur(getListJoueur(partieGlobale)); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){ + if(get_y(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==y){ + //sauvegarde de la ressource du Personnage. + ressource = (getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))->skins.charac_default; + // On remet le pointeur courant sur le personnage dont c'est le tour. + setOnJoueur(getListJoueur(partieGlobale),actuel); + //retour de la ressource du personnage. + return ressource; + } + } + } + //recherche du Personnage sur la case pour le premier Joueur. + nextJoueur(getListJoueur(partieGlobale)); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){ + if(get_y(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==y){ + ressource = (getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))->skins.charac_default; + setOnJoueur(getListJoueur(partieGlobale),actuel); + return ressource; + } + } + } + //Si aucun personnage trouvé. + return NULL; + } +} + +// 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; + EtatsJeu state = SAISIE_JOUEURS; + extern Partie * partieGlobale; + extern Game_Package packGlobal; + initJeu(); + ajouterUnJoueur("Joueur1",&state); + ajouterUnJoueur("Joueur2",&state); + + ajouterPersonnage(packGlobal.Classes_Package[0].nom,0,1); + ajouterPersonnage(packGlobal.Classes_Package[1].nom,1,1); + ajouterPersonnage(packGlobal.Classes_Package[2].nom,2,1); + ajouterPersonnage(packGlobal.Classes_Package[3].nom,0,2); + ajouterPersonnage(packGlobal.Classes_Package[4].nom,1,2); + ajouterPersonnage(packGlobal.Classes_Package[0].nom,2,2); + + selectionnerCarte(packGlobal.Cartes_Package[1].nom); + initPositions(); + + + for(i=0;i<LARG_MAX_CARTE;i++){ + for(j=0;j<HAUT_MAX_CARTE;j++){ + printf("%s\n",ObtenirRessourceTerrain(i,j)); + } + } + + for(i=0;i<LARG_MAX_CARTE;i++){ + for(j=0;j<HAUT_MAX_CARTE;j++){ + printf("%d ",personnagePresent(i,j)); + } + printf("\n"); + } + + 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); + } + } + +} + diff --git a/src/controleur.h b/src/controleur.h index 308acd0..8e6059f 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -29,6 +29,11 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur); int selectionnerCarte(char * nomCarte); void initPositions(); +char * ObtenirRessourceTerrain(int x, int y); +int personnagePresent(int x, int y); +char * obtenirRessourcePersonnage(int x, int y); + +void testControlleurConsole(); #endif // CONTROLEUR_H -- GitLab