Skip to content
Snippets Groups Projects
Commit 9941fd20 authored by Montjoie Henri's avatar Montjoie Henri
Browse files

merge

parents 55a75fe0 d73aaf1a
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -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;
}
......
......@@ -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);
}
}
}
......
......@@ -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
......@@ -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
......
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