Bonjour a toutes et tous,

Je suis actuellement en train d'apprendre le C++ et, pour appliquer ce que j'apprends j'ai voulu créer un mini RPG (Wouha l'originalité du truc, personne n'y a pensé ...). Donc voila l'idée: un petit RPG où deux personnages (en l’occurrence pour mon cas des Mages) se battent.

J'ai créé un main.cpp (logique), une première classe appelé Mage (.h et .cpp) qui sera ma classe mère et deux autres classes filles qui hérite de ma classe Mage à savoir MageFeu et MageGlace (.h et .cpp aussi pour les deux). Normalement, jusque là je suis bon. J'ai créé les différents constructeurs, méthodes et attribut dont j'ai besoin et j'ai tester et cela fonctionne.

Dans mon programme main, j'ai créé une fonction if pour pouvoir choisir le type de mage que l'on veut être (et aussi choisir son nom, etc ...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
cout << "Rentrez le nom du premier mage svp:" << endl;
    getline(cin, nomMage1);
    cout << "Choisissez le type de mage:" << endl;
    cin >> choixType1;
    if(choixType1 == 1)
    {
        MageFeu mage1(nomMage1);
    }
    else if(choixType1 ==2)
    {
        MageGlace mage1(nomMage1);
    }
(bien sur je ne l'ai pas préciser, toutes les différentes variables ont été créées au préalable de ce code.

Ensuite je crée une boucle do ... while pour réaliser le combat et c'est dans cette boucle que j'ai mes problèmes mais avant de vous parler des problèmes, je vous montre ma boucle (que beaucoup considéreront comme charger et compliqué sans doute pour rien)
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
 
do
    {
 
        cout << "TOUR " << compteur << endl <<endl;
 
    cout << nomMage1 << ", choisissez l'action a effectuer" << endl;
    cin >> choixAction1;
    switch(choixAction1)
    {
        //Si l'action choisi vaut 1, le mage1 va attaquer
        case 1:
            cout << nomMage1 << ", a vous d'attaquer. Veuillez choisir une attaque entre:" << endl << "1 - Attaque de base" << endl << "2 - Boule de Feu" << endl << "3 - Tempete de Feu" << endl << "4 - Souffle Ardent" << endl << "5 - Pluie de Braises" << endl;
            cin >> choixAttaque1;
            switch(choixAttaque1)
            {
                case 1:
                    mage1.attaqueBase(mage2);
                break;
                case 2:
                    if(mage1.visuMana(mage1) > 4)
                    {
                        mage1.bouleFeu(mage2);
                        mage1.perteMana(mage1, 5);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                case 3:
                    if(mage1.visuMana(mage1) > 24)
                    {
                        mage1.tempeteFeu(mage2);
                        mage1.perteMana(mage1, 25);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                case 4:
                    if(mage1.visuMana(mage1) > 19)
                    {
                        mage1.souffleArdent(mage2);
                        mage1.perteMana(mage1, 20);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                case 5:
                    if(mage1.visuMana(mage1) > 14)
                    {
                        mage1.pluieBraises(mage2);
                        mage1.perteMana(mage1, 15);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                default:
                    cout << "Vous n'avez pas choisi d'attaque, vous passez votre tour!" << endl;
                break;
 
            }
        break;
        //Si l'action choisi vaut 2, le mage1 va boire une potion de soin
        case 2:
            mage1.boirePotion();
            cout << "Vous buvez une potion de guerison" << endl;
        break;
        //Si il choisi autre chose, le mage1 passe sont tour
        default:
            cout << "Vous n'avez choisi aucune action, vous passez votre tour!" <<endl;
        break;
    }
 
 
    cout << nomMage2 << ", choisissez l'action a effectuer" << endl;
    cin >> choixAction2;
    switch(choixAction2)
    {
        //Si l'action choisi vaut 1, le mage2 va attaquer
        case 1:
            cout << nomMage2 << ", a vous d'attaquer. Veuillez choisir une attaque entre:" << endl << "1 - Attaque de base" << endl << "2 - Boule de Neige" << endl << "3 - Griffes de Glace" << endl << "4 - Mur de Glace" << endl << "5 - Dragon de Glace" << endl;
            cin >> choixAttaque2;
            switch(choixAttaque2)
            {
                case 1:
                    mage2.attaqueBase(mage1);
                break;
                case 2:
                    if(mage2.visuMana(mage2) > 4)               //La condition appelle la méthode et fait perdre du mana au lieu de simplement comparer
                    {
                        mage2.bouleNeige(mage1);
                        mage2.perteMana(mage2, 5);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                case 3:
                    if(mage2.visuMana(mage2) > 14)
                    {
                            mage2.griffesGlace(mage1);
                            mage2.perteMana(mage2, 15);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                break;
                case 4:
                    if(mage2.visuMana(mage2) > 19)
                    {
                        mage2.murGlace(mage1);
                        mage2.perteMana(mage2, 20);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
                    break;
                case 5:
                    if(mage2.visuMana(mage2) > 24)
                    {
                        mage2.dragonGlace(mage1);
                        mage2.perteMana(mage2, 25);
                    }
                    else
                    {
                        cout << "Vous n'avez pas assez de mana pour attaquer, vous passez votre tour!" << endl;
                    }
 
                break;
                default:
                    cout << "Vous n'avez pas choisi d'attaque, vous passez votre tour!" << endl;
                break;
 
            }
        break;
        //Si l'action choisi vaut 2, le mage2 va boire une potion de soin
        case 2:
            mage2.boirePotion();
            cout << "Vous buvez une potion de guerison" <<endl;
        break;
        //Si il choisi autre chose, le mage2 passe sont tour
        default:
            cout << "Vous n'avez choisi aucune action, vous passez votre tour!" <<endl;
        break;
    }
 
    mage1.afficherEtat();
    mage2.afficherEtat();
 
    mage1.gainMana();
    mage2.gainMana();
 
    compteur += 1;
    }
    while(mage1.etatVie() > 0 && mage2.etatVie() > 0);
Mon problème est lorsque je compile, le compilateur me dit que j'ai une erreur à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
mage1.attaqueBase(mage2);
et aux autres car mon objet mage1 n'est pas créé (error: 'mage1' was not declare on the scope)

Ma question est comment faire pour résoudre le problème (sachant que l'idée serait qu'après mon premier switch(choixAction1) et que l'utilisateur a choisi son action, il y aura une nouvelle structure if(choixType == X) pour dire si X=1 donc attaques du mage de feu, X= 2 donc attaques du mage de glace, etc ...

Merci d'avance pour ce qui vont lire, comprendre (et cela ne doit pas etre évident), et m'aider.

Cordialement,
Clairetj