diff --git a/src/attaques.c b/src/attaques.c index 70961a9b5d7bf443ebd08db494ed9e66a8fb914e..825f084df84328bd212f7e26080319add3bc5ccc 100644 --- a/src/attaques.c +++ b/src/attaques.c @@ -32,7 +32,13 @@ int attaquer(Personnage *attaquant, Attaque *attaque_select, Personnage *cible) */ int ajouter_effet_perso(Effet *effet_select, Personnage *cible) { - + int numero_effet = 0; + while((cible->effets[numero_effet].utilise)!=0) + { + numero_effet ++ ; + } + effet_select->utilise = 1; + cible->effets[numero_effet] = *effet_select; return 0; } @@ -47,8 +53,27 @@ int ajouter_effet_perso(Effet *effet_select, Personnage *cible) */ int appliquer_effet(Effet *effet_select, Personnage *cible) { - (cible->PV) -= (effet_select->valeur_degats); + if((effet_select->nb_tours) != 0) + { + (cible->PV) -= (effet_select->valeur_degats_duree); + (cible->PV) += (effet_select->valeur_soin_duree); + (cible->gele) = (effet_select->paralysie); + } + + /* A terminer */ + return 0; +} + +int declencher_effets_tour(Personnage *liste_perso) +{ + int num_perso = 0; + + + /* */ + + + return 0; } diff --git a/src/controleur.c b/src/controleur.c index 1941b8cdc3605b80dcbeeae2cb28ab2c46d3d8eb..82882ab347f641c8fd8a54a8a5bd4664c4ed0e9b 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -218,7 +218,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 @@ -282,7 +282,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. @@ -305,6 +304,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; @@ -320,6 +324,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 23fb5d4a0cc8e6652dcd01c59d0a5c11a66d8a64..26415eab3f7691536effafb907e65ed64f2487a1 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -32,6 +32,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 diff --git a/src/structures.h b/src/structures.h index 02a3cc034d6a369d5a29931bd737b5ecaeafbd26..980793d0045be106f0637f05d97cb5de25a7628e 100644 --- a/src/structures.h +++ b/src/structures.h @@ -142,6 +142,7 @@ typedef Case Carte[TAILLE_MAX_CARTE]; typedef struct Effet{ char id[TAILLE_ID]; /*!< ID de l'effet de taille TAILLE_ID*/ char nom[TAILLE_NOMS]; /*!< Nom de l'effet de taille TAILLE_NOMS*/ + unsigned int utilise; unsigned int nb_tours;/*!< Le nombre de tours restant avant que l'effet ne s'estompe*/ unsigned int valeur_degats; /*!< Le nombre de degats subis */ unsigned int valeur_soin; /*!< Le nombre PV regeneres */ @@ -186,7 +187,8 @@ typedef struct Personnage{ unsigned short int PV; /*!< Les PV actuels du personnage*/ unsigned short int mana; /*!< Le mana actuel du personnage*/ Case *position; /*!< La case representant la position actuelle du personnage*/ - Effet effets[]; /*!< Un tableau d'effets representant les effets affectant le personnage*/ + Effet effets[10]; /*!< Un tableau d'effets representant les effets affectant le personnage*/ + int gele; } Personnage; /*! \struct Competence structures.h