Partage
  • Partager sur Facebook
  • Partager sur Twitter

parcourir des objets facilement

Sujet résolu
    7 mai 2008 à 19:30:46

    hello alors je suis assez nouveau en C++ (j'ai fais les tutos du SdZ et quelques autres) mais j'ai un problème et des questions...^^
    le problème: je fais un jeu d'échec actuellement et j'avais commencé par faire juste une classe joueur et en gros un tableau 2d qui contenait la pièce a la case donnée (x et y) de mon tableau, mais on m'a dit que sa serai beaucoup mieux d'exploiter complètement les objets en créant une classe par pièce. Je l'ai fait et sa me donne sa pour la classe mère et le pion :
    class Piece
    {
    
        public:
            Piece(int x, int y, int couleur);
            ~Piece();
    
            SDL_Rect getCoordonnee();
    
        protected:
            bool m_vivant;
            bool m_couleur;
            bool m_active;
            int m_positionX;
            int m_positionY;
    
    };
    
    
    
    class Pion : public Piece
    {
    
        public:
            Pion(int x, int y, int couleur);
            ~Pion();
    
            int& getPossibilite();
    
        protected:
            bool m_premierCoup;
            bool m_prisePassant;
            int m_deplacement[5][2];
    };
    

    et ici le bout de code de la classe joueur (ce sont des échantillons juste pour que vous voyez de quoi je parle) :
    class Joueur
    {
    
        public:
            Joueur(int couleur);
            ~Joueur();
    
        private:
            Pion *m_pUn;
            Pion *m_pDeux;
            Pion *m_pTrois;
            Pion *m_pQuatre;
            Pion *m_pCinq;
            Pion *m_pSix;
            Pion *m_pSept;
            Pion *m_pHuit;
            Tour *m_tUn;
            Tour *m_tDeux;
            Fou *m_fUn;
            Fou *m_fDeux;
            Cheval *m_cUn;
            Cheval *m_cDeux;
            Dame *m_dUn;
            Roi *m_roi;
    
    };
    

    bref voila ce code n'est pas très important c'est juste pour que vous situiez mais seulement que après je veux récupérer les "m_positionX" et "m_positionY" de toutes les pièces de la classe Piece pour pouvoir faire l'affichage etc.

    Ma question est : y a-t-il une possibilité de mettre tous mes objets dans un conteneur et de les parcourir à l'aide d'une seule boucle, étant donné que m_positionX se trouve dans la classe mère ? Ou bien je dois obligatoirement faire une boucle pour les pions, une pour les tour et ainsi de suite ?

    sinon une autre question de point de vue pratique, comme les pions peuvent se transformer en dame es-ce que je dois créer déjà 9 pointeurs vers des objets dame qui seront à null et qui auront des propriété que lorsqu'un pion atteindra le bout ? Sur cette question je me suis dis que pour un jeu de stratégie ou il y aurait max 200 unité, il devrait y avoir 200 objet de chaque créé au départ au cas ou ? sa me semble invraisemblable alors je me dis que il doit bien y avoir une autre possibilité de créé des objet dynamiquement sans se préoccuper d'avoir un nom différent (ex juste un id par ex.) o_O

    voila j'ai fini, j'espère que vous avez comprit ce que j'essayais de dire...
    ha oui j'ai pas mal entendu parler des map ou list mais même après de longue recherche j'ai pas trouvé de tuto qui en parlait, si qqn en a un sous la main... :)
    merci d'avance !! bonne soirée
    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2008 à 19:47:07

      Pion *m_pUn;
              Pion *m_pDeux;
              Pion *m_pTrois;
              Pion *m_pQuatre;
              Pion *m_pCinq;
              Pion *m_pSix;
              Pion *m_pSept;
              Pion *m_pHuit;
              Tour *m_tUn;
              Tour *m_tDeux;
              Fou *m_fUn;
              Fou *m_fDeux;
              Cheval *m_cUn;
              Cheval *m_cDeux;
              Dame *m_dUn;
              Roi *m_roi;
      

      oulala, ce n'est absolument pas "beau" et tu perds tout les avantages du polymorphisme, mieux vaux passer par
      std::vector<Piece*> mesPieces;
      // ou tout autres conteneurs adaptés
      


      sinon j'ai pas lu ton probleme, mais change deja ca ;)
      • Partager sur Facebook
      • Partager sur Twitter
        7 mai 2008 à 20:32:19

        oui en fait c'est déjà en partie ce que je demandais, mais ensuite je vois pas trop quoi faire. J'ai jamais fais de polymorphisme, comment sa se passe après ? ont doit pas déclarer les autres objets (il n'y a plus de m_pUn, m_pDeux, etc ?)? On remplit le vector comme normal après même qu'il n'y a pas que le même type ?
        enfin la je ne vois pas trop comment faire avec sa par la suite. merci bien déja de ta réponse, sa m'ouvre sur le fait que ya une solution déja bien plus simple :)
        • Partager sur Facebook
        • Partager sur Twitter
          7 mai 2008 à 20:36:28

          je te conseille deja de te renseigner au sujet du polymorphisme
          • Partager sur Facebook
          • Partager sur Twitter
            7 mai 2008 à 21:38:26

            ok j'ai un peu été voir comment se passait le polymorphisme, sa m'aide beaucoup pour la suite !!
            Mais j'ai une autre question, es-ce que je dois quand même créer tous les objets que je veux placer (prenons l'exemple que je veux créer 600 personnages) ou y a-t-il un moyen de les créer dynamiquement (comme si on avais un tableau de int par ex mais que à la place de int se soit des objet et que l'on puisse faire tableau[x]->méthode().) enfin voila je me demandais si sa existait et comment le faire, j'ai trouvé un article sur les classe abstraite et les méthodes virtuelle mais je comprend pas trop le rôle des deux.

            en tout cas merci déjà beaucoup pour ta réponse !!
            • Partager sur Facebook
            • Partager sur Twitter
              9 mai 2008 à 9:38:09

              Alors voila c'est bon j'ai enfin trouvé comment faire tout ce que je voulais... merci bien à toi pour ta réponse qui m'a bien aiguillée !!
              Pour la création d'objets sans limite j'ai trouvé la réponse ici.

              bon codage :)
              • Partager sur Facebook
              • Partager sur Twitter

              parcourir des objets facilement

              × 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