Problème dans le déroulement de mon programme
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:
Code:
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 |
fichier Mage.cpp
Code:
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;
} |
J'ai donc ensuite créé une première classe fille héritant de Mage nommé MageFeu
fichier MageFeu.h
Code:
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 |
fichier MageFeu.cpp
Code:
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);
} |
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.
Maintenant, je vous donne mon fichier main.cpp
Code:
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