Bonjour, J’ai un souci de pointeurs en POO sur un programme en C++. J’ai créé un programme un peu RPG avec deux personnages de tapent dessus, mais le problème c’est qu’au lieu d’envoyer la valeur de leurs stats, ils envoient l’adresse de leurs stats.
#include <iostream>
#include <string>
#include <random>
using namespace std;
class Perso
{
private:
int attaque;
int degats;
int armureTronc;
int casque;
int endurance;
public:
void attaquer(int att, int deg, Perso def);
void defendre(int deg, int protec, int endurance, int part);
int *getAtt();
int getTete(); //Ces deux là ne servent à rien,
int getTronc();//mais je les garde au cas où
int *getEndur();
int *getDeg();
Perso();
Perso(int attaque, int degats, int armureTronc, int casque, int endurance);
};
int *Perso::getAtt()
{
return &attaque;
}
int *Perso::getDeg()
{
return °ats;
}
int *Perso::getEndur()
{
return &endurance;
}
void Perso::defendre(int deg, int protec, int endurance, int part)
{
if(deg > protec)
{
cout << "Protection insuffisante, dégâts subis : " << deg - protec << endl;
endurance += protec;
endurance -= deg;
if(endurance <= 0)
{
cout << "Le personnage attaqué est mort sur ce coup. Le combat est terminé.";
exit(1);
}
} else {
cout << "Le coup n'est pas assez puissant." << endl;
}
}
void Perso::attaquer(int att, int deg, Perso def)
{
if(rand()%100 + 1 < att)
{
cout << "Attaque reussie" << endl;
if(rand()%100 + 1 < 50)
{
cout << "Dégâts sur le tronc :" << endl;
int subis = deg + rand()%10 + 1;
cout << "Résultat du jet de dé : " << subis - deg << endl;
cout << subis << " dégâts" << endl;
def.defendre(subis, def.armureTronc, def.endurance, 1);
} else {
cout << "Dégâts a la tête :" << endl;
int subis = deg + rand()%10 + 1;
cout << "Résultat du jet de dé : " << subis - deg << endl;
cout << subis << " dégâts" << endl;
def.defendre(subis, def.casque, def.endurance, 2);
}
} else {
cout << "Attaque echouée" << endl;
}
}
Perso::Perso()
{}
Perso::Perso(int attaque, int degats, int armureTronc, int casque, int endurance)
{}
int main()
{
srand((unsigned int)time(0));
Perso paladin(40, 4, 5, 4, 12);
Perso orc(30, 5, 5, 5, 12);
int test = 0;
//for(int i = 0; i < 3; i++)//while(test == 0)
//La boucle for sert a tester le combat, et si tout marche, on remplace par la while qui sert à le faire durer jusqu'à la mort d'un des deux combattants. Mais il faut d'abord régler le problème des adresses
/*{
paladin.attaquer(*(paladin.getAtt()), *(paladin.getDeg()), orc);
cout << endl;
orc.attaquer(*(orc.getAtt()), *(orc.getDeg()), paladin);
cout << endl;
}*/
cout << "Niveau d'attaque de orc : " << *(orc.getAtt()) << endl << "Niveau de degats de orc : " << *(orc.getDeg()) << endl << "Niveau d'endurance de orc : " << *(orc.getEndur()) << endl;
return 0;
}
//Huh, Huston, we have a problem... ^^'
//Vous y comprenez quelque chose vous ?
Voilà, merci d’avance pour l’aide.
+0
-0