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

Ajout d'une fonction permettant de determiner si une case est à portée.

J'ai modifié Terrains.xml de maniere à ce que les forets ne soient pas franchissables par les sorts.
parent 42af171a
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -4,7 +4,7 @@
</Terrain>
<Terrain id="G_RIVER" name="Riviere" FR="0" FRS="1" PDR="1" Desc="River, arrete de river" f_default="../resources/Skins/eau.bmp">
</Terrain>
<Terrain id="G_FOREST" name="Foret" FR="1" FRS="1" PDR="2" Desc="Le frère de Fopart" f_default="../resources/Skins/foret.bmp">
<Terrain id="G_FOREST" name="Foret" FR="1" FRS="0" PDR="2" Desc="Le frère de Fopart" f_default="../resources/Skins/foret.bmp">
</Terrain>
<Terrain id="G_MOUNT" name="Montagne" FR="0" FRS="0" PDR="0" Desc="Montagne est plus haut que tontagne" f_default="../resources/Skins/montagne.bmp">
</Terrain>
......
......@@ -5,6 +5,7 @@
#include "structures.h"
#include "personnage.h"
#include "deplacements.h"
#include "partie.h"
/*!
* \file case.c
......@@ -124,3 +125,74 @@ int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack)
}
return 1;
}
/*!
* \fn int adjacente(Case * depart, Case * cible)
* \brief La fonction teste si la case cible est adjacente à la case départ.
*
* \param un pointeur vers la case de départ, un pointeur vers la case à tester
* \return 1 si la case est adjacente, 0 sinon.
*/
int adjacente(Case * depart, Case * cible){
if(get_x(cible)==get_x(depart)){
if((get_y(cible)==get_y(depart)-1)||(get_y(cible)==get_y(depart)+1)){
return 1;
}
else{
return 0;
}
}
else if((get_x(cible)==(get_x(depart)-1))||(get_x(cible)==(get_x(depart)+1))){
if(get_x(depart)%2==1){
if((get_y(cible)==get_y(depart))||(get_y(cible)==get_y(depart)-1)){
return 1;
}
else{
return 0;
}
}
else{
if((get_y(cible)==get_y(depart))||(get_y(cible)==get_y(depart)+1)){
return 1;
}
else{
return 0;
}
}
}
else{
return 0;
}
}
/*!
* \fn APorteeRecursif(Carte_Jeu * c, Case * depart, Case * cible,int portee)
* \brief La fonction teste si la case cible est a portée de la case de départ.
*
* \param La carte sur laquelle on fait le test, un pointeur vers la case de départ, un pointeur vers la case à tester, un entier representant la portée
* \return 1 si la case est à portée, 0 sinon.
*/
int APorteeRecursif(Carte_Jeu * c, Case * depart, Case * cible,int portee){
int i,j;
if(depart==cible){
return (cible->terrain->franchissable_sorts==vrai);
}
else if((portee==1)&&(adjacente(depart,cible))){
return (cible->terrain->franchissable_sorts==vrai);
}
else{
portee--;
for((i=get_x(depart)-portee);((i<LARG_MAX_CARTE)&&(i<=get_x(depart)+portee));i++){
for((j=get_y(depart)-portee);((j<HAUT_MAX_CARTE)&&(j<=get_y(depart)+portee));j++){
if(adjacente(getCase(c,i,j),depart)){
if(APorteeRecursif(c,getCase(c,i,j),cible,portee)){
return (cible->terrain->franchissable_sorts==vrai);
}
}
}
}
return 0;
}
}
......@@ -46,6 +46,8 @@ int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack)
/*Case * trouverCase(Carte * c, int x, int y);*/
int adjacente(Case * depart, Case * cible);
int APorteeRecursif(Carte_Jeu *c, Case * depart, Case * cible,int portee);
#endif
......@@ -854,7 +854,7 @@ void testControlleurConsole(){
ajouterPersonnage(packGlobal.Classes_Package[4].nom,1,2);
ajouterPersonnage(packGlobal.Classes_Package[0].nom,2,2);
selectionnerCarte(packGlobal.Cartes_Package[2].nom);
selectionnerCarte(packGlobal.Cartes_Package[4].nom);
initPositions();
......@@ -865,11 +865,37 @@ void testControlleurConsole(){
}
for(i=0;i<LARG_MAX_CARTE;i++){
if(i%2){
printf(" ");
}
for(j=0;j<HAUT_MAX_CARTE;j++){
printf("%d ",personnagePresent(i,j));
}
printf("\n");
}
printf("\n");
for(i=0;i<LARG_MAX_CARTE;i++){
if(i%2==0){
printf(" ");
}
for(j=0;j<HAUT_MAX_CARTE;j++){
printf("%d ",adjacente(getCase(getCarte(partieGlobale),7,4),getCase(getCarte(partieGlobale),i,j)));
}
printf("\n");
}
printf("\n");
printf("A portee :\n");
for(i=0;i<LARG_MAX_CARTE;i++){
if(i%2==0){
printf(" ");
}
for(j=0;j<HAUT_MAX_CARTE;j++){
printf("%d ",APorteeRecursif(getCarte(partieGlobale),getCase(getCarte(partieGlobale),7,4),getCase(getCarte(partieGlobale),i,j),3));
}
printf("\n");
}
printf("\n");
for(i=0;i<LARG_MAX_CARTE;i++){
for(j=0;j<HAUT_MAX_CARTE;j++){
......@@ -902,7 +928,6 @@ void testControlleurConsole(){
}
}
}
}
......
......@@ -39,6 +39,8 @@ void retraitPD(Personnage * p, int n);
int personnageKO(Personnage * p);
int manaSuffisant(Personnage * p, int mana);
int APortee(Personnage * depart, Personnage * cible, int portee);
Classe * getClasse(Personnage *p);
char * getNomPersonnage(Personnage * p);
......
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