Bonjour a toutes et tous,
Dans le cadre de mon apprentissage au langage c++, je décidé de faire un projet pour appliquer les différents points que j'ai appris, à savoir la création d'un mini RPG (je sais, rien de bien original mais bon).
Avant de vous expliquer mon problème en détail, je vais vous expliquer le but de mon programme et mettre les différents codes écrit jusque là.
L'idée de mon RPG est un petit jeu de duel entre deux mages (je sais, niveau originalité je peux repasser). Les deux joueurs vont créer, tour à tour, leur mage en indiquant son nom et le type de mage qu'il veut utiliser (feu, eau, vent, terre ... mais pour l'instant celle le feu est créé). Puis de les faire combattre (cette partie ne sera pas aborder ici car non-créée pour l'instant vu que la partie création a des problèmes).
Pour la création des mages, j'ai d'abord créé une classe mère nommé Mage afin que tous les mages, quelques soit leur type soit initialisé pareillement et ont tous des actions de base
fichier Mage.h:
fichier Mage.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
22
23
24
25
26
27
28
29
30
31
32 #ifndef MAGE_H_INCLUDED #define MAGE_H_INCLUDED #include <iostream> #include <vector> #include <string> class Mage { public: //Constructeur Mage(std::string nom); //Destructeur virtual ~Mage(); //Methodes virtual void recevoirDegats(int degats); virtual void recevoirGuerison(); virtual void coupDePoing(Mage &cible) const; virtual void sePresenter () const; virtual void afficherEtat(); protected: //Attributs int m_vie; int m_mana; std::string m_nom; }; #endif // PERSONNAGE_H_INCLUDED
J'ai donc ensuite créé une première classe fille héritant de Mage nommé MageFeu
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 #include "Mage.h" using namespace std; //Constructeur Mage::Mage(string nom) : m_vie(100), m_mana(100), m_nom(nom) { } //Destructeur Mage::~Mage() { } //Méthode "de base" pour tous les personnes void Mage::recevoirDegats(int degats) { m_vie -= degats; } void Mage::recevoirGuerison() { m_vie += 20; } void Mage::coupDePoing(Mage &cible) const { cible.recevoirDegats(10); } void Mage::sePresenter() const { cout << "Bonjour, je m'appelle " << m_nom << "." << endl; cout << "J'ai encore " << m_vie << " points de vie et " << m_mana << " points de mana." << endl << endl; } void Mage::afficherEtat() { cout << "Etat de " << m_nom << endl; cout << "Vie : " << m_vie << endl; cout << "Mana : " << m_mana << endl << endl; }
fichier MageFeu.h
fichier MageFeu.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
22
23
24
25
26
27 #ifndef MAGEFEU_H_INCLUDED #define MAGEFEU_H_INCLUDED #include <iostream> #include <string> #include "Mage.h" class MageFeu : public Mage { public: //Constructeurs MageFeu(std::string nom); //Destructeur virtual ~MageFeu(); //Methodes virtual void sePresenter () const; virtual void bouleDeFeu(Mage &cible) const; protected: //Attributs spécifiques a la classe Magicien }; #endif // MAGEFEU_H_INCLUDED
Personnellement, je préfère créer un fichier par classe que tout mettre dans le même ficher, cela peut déranger et alourdir le code en include mais m'y retrouve plus facilement.
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 #include "Mage.h" #include "MageFeu.h" using namespace std; //Constructeurs MageFeu::MageFeu(string nom) : Mage(nom) { } //Destructeur MageFeu::~MageFeu() { } //Méthodes spécifiques à la classe Mage de feu void MageFeu::sePresenter() const { cout << "Bonjour, je m'appelle " << m_nom << ". Je suis un Mage de feu" << endl; cout << "J'ai encore " << m_vie << " points de vie et " << m_mana << " points de mana." << endl << endl; } void MageFeu::bouleDeFeu(Mage &cible) const { cible.recevoirDegats(35); }
Maintenant, je vous donne mon fichier main.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
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 #include <iostream> #include "Mage.h" #include "MageFeu.h" using namespace std; int main() { string nomMage1; string nomMage2; int choixType1(0); int choixType2(0); //Creation du premier mage Mage* pMage1 = NULL; cout << "Rentrez le nom du premier mage svp:" << endl; getline(cin, nomMage1); cout << "Choisissez le type de mage:" << endl; cin >> choixType1; if(choixType1 == 1) { pMage1 = new Mage(nomMage1); } else if(choixType1 ==2) { pMage1 = new MageFeu(nomMage1); } pMage1->sePresenter(); //Creation du deuxième mage Mage* pMage2 = NULL; cout << "Rentrez le nom du deuxieme mage svp:" << endl; getline(cin, nomMage2); cout << "Choisissez le type de mage:" << endl; cin >> choixType2; if(choixType2 == 1) { pMage2 = new Mage(nomMage2); } else if(choixType2 ==2) { pMage2 = new MageFeu(nomMage2); } pMage2->sePresenter(); return 0; }
Lorsque je ne crée qu'un mage (je met une des deux création de mage en commentaire, n'importe laquelle), je n'ai aucun problème, la création se fait normalement et mon programme s'arrête.
Le problème vient lorsque je veux créer les deux mages: le premier mage se créer bien (on renseigne correctement le nom et le type choisi) mais lorsque l'on passe à la création du deuxième mage, celle-ci ne nous permet pas de renseigner le nom du personnage et nous demande tout de suite de choisir le type de mange. On obtient donc un deuxième mage du type choisi mais sans nom.
Comment faire pour régler le problème ???
Dans l'attente de vos réponse,
Cordialement,
Clairetj
Partager