From db968b000c42608b762f03fe5dc8271fc06487c1 Mon Sep 17 00:00:00 2001 From: ColinDrieu <colin.drieu@insa-rennes.fr> Date: Sun, 8 May 2016 18:57:15 +0200 Subject: [PATCH] Ajout au controlleur d'une fonction pour ajouter la Carte de jeu. --- src/controleur.c | 56 ++++++++++++++++++++++++++++++++------------- src/controleur.h | 6 +++-- src/controleurSDL.c | 3 ++- src/personnage.c | 22 +++++++++++++----- src/personnage.h | 8 ++++--- 5 files changed, 67 insertions(+), 28 deletions(-) diff --git a/src/controleur.c b/src/controleur.c index 836c813..454022d 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -16,6 +16,7 @@ #include "gamePackage.h" #include "roxml.h" #include "SDL.h" +#include "structures.h" Partie * partieGlobale; Game_Package packGlobal; @@ -196,17 +197,11 @@ char ** obtenirDescriptionCarte(){ * \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 * \return un pointeur vers cette case */ -Case * trouverCase(Carte c, int x, int y) -{ - if((x<0)||(x>=LARGEUR_CARTE)){ - return NULL; - } - else if((y<0)||(y>=HAUTEUR_CARTE)){ - return NULL; - } - else{ - return &c[(y*LARGEUR_CARTE)+x]; +Case * trouverCase(Carte_Jeu * c, int x, int y){ + if((x>=0)&&(x<LARG_MAX_CARTE)&&(y>=0)&&(y<HAUT_MAX_CARTE)){ + return &c->Tab_Cases[x][y]; } + return NULL; } /*! @@ -230,7 +225,7 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){ } //Création du personnage - Personnage * p = default_personnage(i,packGlobal,trouverCase(packGlobal.Cartes_Package[0],0,0)); + Personnage * p = default_personnage(i,packGlobal); //Ajout du Personnage à l'équipe du Joueur switch (numJoueur){ @@ -253,14 +248,43 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){ else{ return 0; } - - - } + /*! + * \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. + */ +int selectionnerCarte(char * nomCarte){ + int i; + i=0; + //Recherche de la Carte dans le Package + while((strcmp(nomCarte,packGlobal.Cartes_Package[i].nom)!=0)&&(i<nbCartes())){ + i++; + } + if(i>=nbCartes()){ + return 0; + } + //Initialisation de la Carte_Jeu + if(initCarte(&packGlobal.Cartes_Package[i],getCarte(partieGlobale),&packGlobal)==0){ + return 0; + } - - + // Positionnement des Personnages sur la Carte_Jeu. + setOnFirstJoueur(partieGlobale->participants); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + setPosition(getCurrentJoueur(partieGlobale->participants)->groupe[i],&partieGlobale->c->Tab_Cases[6+i][0]); + } + nextJoueur(partieGlobale->participants); + for(i=0;i<TAILLE_MAX_GROUPE;i++){ + setPosition(getCurrentJoueur(partieGlobale->participants)->groupe[i],&partieGlobale->c->Tab_Cases[6+i][HAUT_MAX_CARTE-1]); + } + return 1; +} diff --git a/src/controleur.h b/src/controleur.h index 8f29efe..ab085f7 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -22,9 +22,11 @@ char ** obtenirNomsCartes(); char ** obtenirDescriptionCarte(); void freeCartes(char **); -Case * trouverCase(Carte c, int x, int y); +Case * trouverCase(Carte_Jeu * c, int x, int y); -void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur); +int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur); + +int selectionnerCarte(char * nomCarte); #endif // CONTROLEUR_H diff --git a/src/controleurSDL.c b/src/controleurSDL.c index 1a9a452..bd3cd92 100644 --- a/src/controleurSDL.c +++ b/src/controleurSDL.c @@ -9,6 +9,7 @@ #include "deplacements.h" #include "SDL.h" #include "controleurSDL.h" +#include "controleur.h" /*! * \file controleurSDL.c @@ -34,7 +35,7 @@ void init_controleur(SDL_Rect Position_Case[]) init_case(&Carte_actuelle[i],Position_Case[i].x,Position_Case[i].y,NULL); } for(i=0;i<NB_PERSO;i++) - set_personnage(&ListePersos[i],NULL,&Carte_actuelle[i]); + set_personnage(&ListePersos[i],NULL); } /*! diff --git a/src/personnage.c b/src/personnage.c index 914b4b6..bf2e0c9 100644 --- a/src/personnage.c +++ b/src/personnage.c @@ -36,7 +36,7 @@ Personnage* init_personnage() * \param Un personnage. * \return Un personnage initialisé. */ -Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) +Personnage* set_personnage(Personnage *perso, Classe *c) { perso->classe=c; if(c!=NULL){ @@ -44,8 +44,7 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) perso->PV=c->PV_max; perso->mana=c->mana_max; } - perso->position=casedepart; - marquer_occupee(casedepart); + perso->position=NULL; return perso; } @@ -56,10 +55,10 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) * \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,Case *casedepart) +Personnage* default_personnage(int numero, Game_Package Pack) { Personnage* Perso = init_personnage(); - set_personnage(Perso, &Pack.Classes_Package[numero], casedepart); + set_personnage(Perso, &Pack.Classes_Package[numero]); return Perso; } @@ -106,7 +105,7 @@ Classe * getClasse(Personnage *p){ } /*! - * \fn Classe * getPosition(Personnage *p) + * \fn Case * getPosition(Personnage *p) * \brief La fonction renvoie la position d'un personnage. * * \param Un personnage. @@ -116,6 +115,17 @@ 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. diff --git a/src/personnage.h b/src/personnage.h index cbb2402..66470a6 100644 --- a/src/personnage.h +++ b/src/personnage.h @@ -6,11 +6,11 @@ #ifndef PERSONNAGE_H_INCLUDED #define PERSONNAGE_H_INCLUDED -Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart); +Personnage* set_personnage(Personnage *perso, Classe *c); Personnage* init_personnage(); -Personnage* default_personnage(int numero, Game_Package Pack, Case *casedepart); +Personnage* default_personnage(int numero, Game_Package Pack); void freePersonnage(Personnage * p); @@ -18,6 +18,8 @@ void setNumero(Personnage * p, int n); int getNumero(Personnage * p); +void setPosition(Personnage * p, Case * c); + Case* getPosition(Personnage *p); int get_PV(Personnage *p); @@ -32,7 +34,7 @@ char * getNomPersonnage(Personnage * p); boolean est_paralyse(Personnage *p); -int deplacer_personnage (Personnage *perso, Case *destination); +int deplacer_personnage(Personnage *perso, Case *destination); int estSurLaCase(Personnage * p, Case * c); -- GitLab