Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > parcourir des objets facilement > Lecture du sujet

parcourir des objets facilement

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Gartu # Posté le 07/05/2008 à 19:30:46
Avatar
Groupe : Membres
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 : Code : C++
 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
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) :Code : C++
 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
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

Qu'est ce qui est apparu en premier, le langage de programmation ou le compilateur ?
 
Hors ligne Chlab_lak # Posté le 07/05/2008 à 19:47:06
Avatar
Groupe : Membres
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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
Code : C++
1
2
std::vector<Piece*> mesPieces;
// ou tout autres conteneurs adaptés


sinon j'ai pas lu ton probleme, mais change deja ca ;)
 
Hors ligne Gartu # Posté le 07/05/2008 à 20:32:18
Avatar
Groupe : Membres
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 :)

Qu'est ce qui est apparu en premier, le langage de programmation ou le compilateur ?
 
Hors ligne Chlab_lak # Posté le 07/05/2008 à 20:36:27
Avatar
Groupe : Membres
Hors ligne Gartu # Posté le 07/05/2008 à 21:38:25
Avatar
Groupe : Membres
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 !!

Qu'est ce qui est apparu en premier, le langage de programmation ou le compilateur ?
 
Hors ligne Gartu # Posté le 09/05/2008 à 09:38:09
Avatar
Groupe : Membres
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 :)

Qu'est ce qui est apparu en premier, le langage de programmation ou le compilateur ?
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 118 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 3.7303s (3.7141s)