IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème dans le déroulement de mon programme


Sujet :

C++

  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut 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 : 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
    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
    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 : 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
    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
    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 : 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
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La façon paresseuse que je tends à utiliser, c'est bosser uniquement en getline() et faire le parsing par la suite (avec un istringstream par exemple).

    Sinon, tu dois "finir de lire la ligne" (alias "purger le buffer clavier"), de la manière décrite dans la FAQ.

    PS: afficherEtat() devrait être const.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    Bonjour et merci Medinoc

    La solution de purger le buffer clavier (celle que j'ai choisi) marche et je retrouve le déroulement que j'espérais.

    Merci encore
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème dans l'affichage de mon contrôle SiteMapPath
    Par jacko842 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 20/01/2010, 07h27
  2. Ligne pour repérer le déroulement de mon programme
    Par Jahprend dans le forum Langage
    Réponses: 11
    Dernier message: 14/05/2009, 12h43
  3. [Free Pascal] Problème dans la séquence d'un programme
    Par roxy1730 dans le forum Free Pascal
    Réponses: 8
    Dernier message: 21/04/2009, 00h37
  4. Problème dans la translation de mon personnage
    Par croco.o dans le forum OpenGL
    Réponses: 4
    Dernier message: 28/02/2009, 08h39
  5. Réponses: 18
    Dernier message: 04/06/2007, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo