Partage
  • Partager sur Facebook
  • Partager sur Twitter

amelioration du PG console qui plante

aidez moi a aider David

    20 novembre 2007 à 18:12:29

    bon alors j'ai demarre ya quelques semaines les tuto de Mateo, j'en suis au tuto c++ avec david et goliath qui se tapent dessus, et j'me suis dit que j'allais prendre mon temps et compliquer les choses. Donc j'ai voulu donner une valeur de precision aux armes (qui contrebalancera la puissance) qui influerait sur la reussite de l'attaque.
    donc je cree ma valeur
    1. int m_degats, m_precision;
    , un accesseur pour recuperer sa valeur dans le main
    1. int Arme::getPrecision() const
    2. {
    3.     return m_precision;
    4. }

    et me voila qui ouvre un if dans la methode Personnage::attaquer. je cree une petite fonction simple pour avoir un nombre aleatoire, l'idée etant que si la precision est superieure au nombre, l'attaque reussi (j'me suis pas vraiment plongé dans la qualité de "l'algorithme", je veux deja que ca marche.)
    mais ca marche pas
    1. void Personnage::attaquer(Personnage &cible)
    2.    {
    3.        if(m_arme.getPrecision() > nb = RAND_NUM * m_arme.getPrecision)
    4.        {
    5.        cible.recevoirDegats(m_arme.getDegats());
    6.        cout<<m_nom<<" attaque et fait "<<m_arme.getDegats()<<" points de vie de degats."<<endl;
    7.        }
    8.        else
    9.        cout<<m_nom<<" a lamentablement rate son attaque."<<endl;


    me renvoie une erreur :"error: invalid use of member (did you forget the `&' ?)" pour la ligne du if....
    bref, help siouplait, mon david ne tiendra pas le coup sinon.....^^
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2007 à 18:20:36

      - pas de signe '=' dans une condition
      - d'ou vient ta variable 'nb', et a quoi sert-elle ?
      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2007 à 18:37:12

        ah....c'etait aussi bete?....
        J'ai crée une variable pour contenir le valeur aleatoire, et en fait... euh... elle sert à rien, je pense...
        J'vais essayé sans^^
        merci pour la reponse

        bon, l'erreur est avant le signe =
        mon nouveau code
        1. void Personnage::attaquer(Personnage &cible)
        2.    {
        3.        if(m_arme.getPrecision() >  RAND_NUM * m_arme.getPrecision)
        4.        {
        5.        cible.recevoirDegats(m_arme.getDegats());
        6.        cout<<m_nom<<" attaque et fait "<<m_arme.getDegats()<<" points de vie de degats."<<endl;
        7.        }
        8.        else
        9.        cout<<m_nom<<" a lamentablement rate son attaque."<<endl;
        10.    }


        et toujours la meme reponse : "error: invalid use of member (did you forget the `&' ?)"
        si j'ai bien suivi, member c'est un attribut, mais j'ai fait un accesseur expres pour pas violer la sacro sainte loi de l'encapsulation.
        j'me goure quelque part mais z'ou donc....

        euh ok, en fait j'avais pas mis les parentheses à la fin de m_arme.getPrecision. :-°:euh:

        Maintenant ca compile, j'vais tester
        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2007 à 18:56:04

          bon, ca compile avec un resultat de 0 pour la valeur aleatoire, donc je vais faire ca propre, paske la ca marche pas

          mon Personnage.h
          1. #ifndef DEF_PERSONNAGE // Si la constante n'a pas été définie` le fichier n'a jamais été inclus
          2. #define DEF_PERSONNAGE // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus
          3. /* Contenu de votre fichier .h (autres includes` prototypes de vos fonctions` defines...) */
          4. #include "Arme.h"
          5. class Personnage
          6. {
          7.     public:
          8.     Personnage(std::string nom);
          9.     Personnage::Personnage( std::string nomArme, int degatsArme, int precisonArme, std::string nom);
          10.     ~Personnage();
          11.     void recevoirDegats(int nbDegats);
          12.     void attaquer(Personnage &cible);
          13.     void lancerSort(Personnage &cible);
          14.     void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
          15.     void boirePotion(int quantiteDePotion);
          16.     void recupererMana();
          17.     bool estVivant();
          18.     void afficherEtat();
          19.     private:
          20.     int m_vie, m_mana;
          21.     Arme m_arme;
          22.     std::string m_nom;
          23.     int m_degatsMana;
          24.     int nb;
          25. };
          26. #endif



          Bon en fait je sais pas creer un nombre aleatoire sous c++, c'est ca mon vrai probleme.
          donc qqun sais comment on fait???
          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2007 à 19:05:52

            - il manque des parenteses dans ton if
            - avec rand() (il me smeble qu'il existe une include <random> mais prevue pour C++0x (std::tr1::randomise() peut-etre))
            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2007 à 19:09:25

              j'ai vu, c'etait une bete faute d'inattention.... :honte::honte::honte:
              tant qu'on y est, tu saurais pas creer une valeur aleatoire sous c++ (comme srand sous C....)???????

              lol j'ai raté l'edit de quelques sec... j'vais me lancer a la recherche de rand^^ :D:D

              Merci encore^^

              1. void Personnage::attaquer(Personnage &cible)
              2.    {
              3.        //int temp = m_arme.getPrecision();
              4.        //cout<<temp<<endl;
              5.        nb = rand()%10;
              6.        //cout<<nb<<endl;
              7.        if( m_arme.getPrecision() >  nb*1.12 )
              8.        {
              9.        cible.recevoirDegats(m_arme.getDegats());
              10.        cout<<m_nom<<" attaque et fait "<<m_arme.getDegats()<<" points de vie de degats."<<endl;
              11.        }
              12.        else
              13.        cout<<m_nom<<" a lamentablement rate son attaque."<<endl;
              14.    }


              TADAAAAAA!!!! tout marche, la vie est belle, et le challenger david a une petite chance!!!
              bon, allez, on va mettre des pointeurs dans la POO maintenant....

              merci encore, Chlab_lak
              • Partager sur Facebook
              • Partager sur Twitter

              amelioration du PG console qui plante

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown