Skip to content
Snippets Groups Projects
Commit d733b3ff authored by ColinDrieu's avatar ColinDrieu
Browse files

Code de fonctions permettant d'obtenir les ressources pour afficher la carte.

La fonction testControlleurConsole me permet de tester les fonctions,
elle peut aussi être un exemple d'utilisation des fonctions.
parent f4fe4f69
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -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);
}
}
}
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment