Bonjour a vous, je suis débutant en C++ et j'ai la un petit problème que je ne comprend. J'ai créer un minimini RPG de débutant, jusque la, rien de spécial surtout que mon EDI ne m'affiche pas de message d'erreur, et que ma console se lance rapidement. Plutot que de vous expliquer exactement le problème, je vais vous les montrer. Voici déjà mon code :
Et voici le petit problème qui survient dans la console (pièce jointe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 #include <iostream> #include "Personnage.h" //Ne pas oublier using namespace std; int main() { Personnage nullos, goliath("longue épée", 20, "Goliath"), mael("Sulfateuse", 90, "Mael"); //Création de 2 objets de type Personnage : david et goliath cout << "vague 1" << endl << endl; goliath.attaquer(nullos); //goliath attaque david nullos.boirePotionDeVie(20); //david récupère 20 de vie en buvant une potion goliath.attaquer(nullos); //goliath réattaque david nullos.attaquer(goliath); //david contre-attaque... c'est assez clair non ? goliath.changerArme("Double hache tranchante vénéneuse de la mort", 60); nullos.boirePotionDeDefense(); //david augmente sa defense. goliath.attaquer(nullos); cout << endl ; nullos.afficherEtat(); cout << endl << endl; goliath.afficherEtat(); cout << endl << endl; mael.afficherEtat(); cout << endl << endl; cout << endl << endl << endl << endl << "vague 2" << endl << endl; mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); mael.boirePotionDeDefense(); nullos.changerArme("mini gun", 50); nullos.attaquer(mael); goliath.boirePotionDeDefense(); mael.attaquer(nullos); mael.attaquer(goliath); goliath.lanceSort(mael); goliath.lanceSort(mael); cout << endl; nullos.afficherEtat(); cout << endl << endl; goliath.afficherEtat(); cout << endl << endl; mael.afficherEtat(); cout << endl << endl; cout << "Vague 3" << endl; cout << "Voulez vous 'attaquer' ou vous 'restaurer' ?" << endl; string choixAction; cin >> choixAction; if (choixAction == "attaquer") { cout << "choisissez un attaquant, goliath, nullos ou mael ?" << endl ; string choixJoueur; cin >> choixJoueur; cout << "choisissez une cible parmis les trois personnage, que vous n'ayez pas choisis en attaquant !" << endl; string cible; cin >> cible; cout << "vous voulez 'attaquer' ou 'lancerunsort' ?" << endl; string choixAttaque; cin >> choixAttaque; if (choixAttaque == "attaquer", choixJoueur == "goliath", cible == "nullos") { goliath.attaquer(nullos); } else if(choixAttaque == "attaquer", choixJoueur == "goliath", cible == "mael") { goliath.attaquer(mael); } else if(choixAttaque == "attaquer", choixJoueur == "nullos", cible == "goliath") { nullos.attaquer(goliath); } else if (choixAttaque == "attaquer", choixJoueur == "nullos", cible == "mael") { nullos.attaquer(mael); } else if(choixAttaque == "attaquer", choixJoueur == "mael", cible == "goliath") { mael.attaquer(goliath); } else if (choixAttaque == "attaquer", choixJoueur == "mael", cible == "nullos") { mael.attaquer(nullos); } else if (choixAttaque == "lancerunsort", choixJoueur == "goliath", cible == "nullos") { goliath.lanceSort(nullos); } else if(choixAttaque == "lancerunsort", choixJoueur == "goliath", cible == "mael") { goliath.lanceSort(mael); } else if(choixAttaque == "lancerunsort", choixJoueur == "nullos", cible == "goliath") { nullos.lanceSort(goliath); } else if (choixAttaque == "lancerunsort", choixJoueur == "nullos", cible == "mael") { nullos.lanceSort(mael); } else if(choixAttaque == "lancerunsort", choixJoueur == "mael", cible == "goliath") { mael.lanceSort(goliath); } else { mael.lanceSort(nullos); } } else { cout << "Vous voulez restaurer votre 'defense' ou votre 'vie' ?" << endl; string choixPotion; cin >> choixPotion; cout << "Choisissez a qui donner la potion : goliath, nullos, mael" << endl; string choixJoueur; cin >> choixJoueur; if (choixPotion == "defense", choixJoueur == "goliath") { goliath.boirePotionDeDefense(); } else if (choixPotion == "defense", choixJoueur == "mael") { mael.boirePotionDeDefense(); } else if (choixPotion == "defense", choixJoueur == "nullos") { nullos.boirePotionDeDefense(); } else if (choixPotion == "vie", choixJoueur == "goliath") { cout << "Quel Quantité de potion donner ? donner un nombre entre 0 et 100" << endl; int quantiteDePotion; cin >> quantiteDePotion; goliath.boirePotionDeVie(quantiteDePotion); } else if (choixPotion == "vie", choixJoueur == "mael") { cout << "Quel Quantité de potion donner ? donner un nombre entre 0 et 100" << endl; int quantiteDePotion; cin >> quantiteDePotion; mael.boirePotionDeVie(quantiteDePotion); } else { cout << "Quel Quantité de potion donner ? donner un nombre entre 0 et 100" << endl; int quantiteDePotion; cin >> quantiteDePotion; nullos.boirePotionDeVie(quantiteDePotion); } } cout << endl; nullos.afficherEtat(); cout << endl << endl; goliath.afficherEtat(); cout << endl << endl; mael.afficherEtat(); cout << endl << endl; return 0; }
En effet l'Utilisateur indique que "mael" "lance un sort" (=lancerunsort) a "goliath" or l'effet produit est que nullos attaque goliath.
Je ne pense pas que le problème viennes de la mais voici les autre fichier lié au projet :
Arme.cpp:
Arme.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include "Arme.h" #include <string> #include <iostream> using namespace std; Arme::Arme() : m_nom("épée rouillé"), m_degats(10) { } Arme::Arme(string nom, int degats) : m_nom(nom), m_degats(degats) { } void Arme::changer(string nom, int degats) { m_nom = nom; m_degats = degats; } void Arme::afficher() const { cout << "Arme : " << m_nom << "( degats : " << m_degats << " )" ; }
Personnage.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef ARME_H_INCLUDED #define ARME_H_INCLUDED #include <iostream> #include <string> class Arme { public: Arme(); Arme(std::string nom, int degats); void changer(std::string nom, int degats); void afficher() const; int getDegats() const; private: std::string m_nom; int m_degats; }; #endif // ARME_H_INCLUDED
et enfin Personnage.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 #include "Personnage.h" #include <string> using namespace std; int Personnage::recevoirDegats(int nbDegats, int defense) { m_vie = m_vie - nbDegats + defense; //On enlève le nombre de dégâts reçus à la vie du personnage if (m_vie < 0) //Pour éviter d'avoir une vie négative { m_vie = 0; //On met la vie à 0 (cela veut dire mort) } } void Personnage::attaquer(Personnage &cible) { cible.recevoirDegats(m_Arme.getDegats(), cible.afficherDefense()); int arme = m_Arme.getDegats(); int defenseCible = cible.afficherDefense(); int degats = arme - defenseCible; if (degats < 0 ) { degats = 0; } cout << m_nomP << " attaque " << cible.afficherNom() << " qui perd " << degats << " points de vie." << endl ; } void Personnage::boirePotionDeDefense() { m_defense +=5; cout << m_nomP << " augmente sa defense de 5 points" << endl; } void Personnage::boirePotionDeVie(int quantitePotion) { m_vie += quantitePotion; if (m_vie > 100) //Interdiction de dépasser 100 de vie { m_vie = 100; } cout << m_nomP << " recupere " << quantitePotion << " points de vie" << endl; } void Personnage::changerArme(string nomNouvelleArme, int degatsNouvelleArme) { m_Arme.changer(nomNouvelleArme, degatsNouvelleArme); cout << m_nomP << " a une nouvelle arme qui s'appelle '" << nomNouvelleArme << "' et qui provoque " << degatsNouvelleArme << " points de dégats" << endl; } bool Personnage::estVivant() const { if (m_vie > 0) // Plus de 0 de vie ? { return true; //VRAI, il est vivant ! } else { return false; //FAUX, il n'est plus vivant ! } } Personnage::Personnage() { m_nomP = "Nullos"; m_vie = 100; m_mana = 100; m_defense = 0; } Personnage::Personnage (string nomArme, int degatsArme, string nomP) : m_vie(100), m_mana(100), m_defense(0), m_Arme(nomArme, degatsArme), m_nomP(nomP) { } Personnage::Personnage(int vie, int mana, string nomP) : m_defense(0), m_vie(vie), m_mana(mana), m_nomP(nomP) { } int Arme::getDegats() const { return m_degats; } int Personnage::afficherDefense() const { return m_defense; } int Personnage::afficherVie() const { return m_vie; } string Personnage::afficherNom() const { return m_nomP; } void Personnage::afficherEtat() const { cout << "Nom : " << m_nomP << endl; cout << "Vie : " << m_vie << endl; cout << "Mana : " << m_mana << endl; cout << "Defense : " << m_defense << endl; m_Arme.afficher(); } void Personnage::lanceSort(Personnage &cible) { int manaDisponible = m_mana; int degatsMagiques = 0.75 * manaDisponible; m_mana -= 25; int defenseCible = cible.afficherDefense(); int degats = degatsMagiques - defenseCible; if(degats < 0 ) { degats = 0; } cible.recevoirDegats(degatsMagiques, cible.afficherDefense()); cout << m_nomP << " lance un sort a " << cible.afficherNom() << " qui perd " << degats << " points de vie" << endl ; }
Merci d'avance de vos réponses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #ifndef PERSONNAGE_H_INCLUDED #define PERSONNAGE_H_INCLUDED #include <string> #include <iostream> #include "Arme.h" class Personnage { public: Personnage(); //Constructeu$ Personnage (std::string nomArme, int degatsArme, std::string nomP); Personnage (int vie, int mana, std::string nomP); int recevoirDegats(int nbDegats, int defense); void attaquer(Personnage &cible); void boirePotionDeDefense(); void boirePotionDeVie(int quantitePotion); void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme); bool estVivant() const; void afficherEtat() const; int afficherDefense() const; int afficherVie() const; std::string afficherNom() const; void lanceSort(Personnage &cible); private: int m_vie; int m_mana; int m_defense; std::string m_nomP; Arme m_Arme; }; #endif // PERSONNAGE_H_INCLUDED![]()
Partager