[c++] Jeu d'échec - Pointeurs ...
timon44
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir à tous !
Voilà, je suis en train de développer un jeu d'échec (simplement en mode terminal pour le moment), et j'ai un petit problème de compréhension.
J'ai créé plusieurs classes :
main, debutPartie, echiquier, case, piece, pion
La classe Echiquier a simplement un tableau[][] de Case.
La classe Case a un pointeur sur une Piece : (Piece *m_piece)
La classe Piece a m_couleur, m_posLigne, m_posCol (coordonnées en fait)
La classe Pion (hérité de Piece) a juste : m_nomPion
Je n'arrive pas à faire le cheminement, à comprendre, comment associer, chaque case à une Piéce de départ (pour le moment juste 2 lignes de pions en fait).
Je pensais faire quelque chose de ce style :
Case casePlateau [2][1].(m_piece->m_nomPion)
Je ne sais pas si je suis assez clair ...
Je met mon code si ça peut aider ...
case,cpp
debutPartie.cpp
echiquier.cpp
piece.cpp
pion.cpp
C'est donc dans échiquier, que je veux appeler le nom de mon pion, mais ça ne marche pas ...
Merci !
Voilà, je suis en train de développer un jeu d'échec (simplement en mode terminal pour le moment), et j'ai un petit problème de compréhension.
J'ai créé plusieurs classes :
main, debutPartie, echiquier, case, piece, pion
La classe Echiquier a simplement un tableau[][] de Case.
La classe Case a un pointeur sur une Piece : (Piece *m_piece)
La classe Piece a m_couleur, m_posLigne, m_posCol (coordonnées en fait)
La classe Pion (hérité de Piece) a juste : m_nomPion
Je n'arrive pas à faire le cheminement, à comprendre, comment associer, chaque case à une Piéce de départ (pour le moment juste 2 lignes de pions en fait).
Je pensais faire quelque chose de ce style :
Case casePlateau [2][1].(m_piece->m_nomPion)
Je ne sais pas si je suis assez clair ...
Je met mon code si ça peut aider ...
case,cpp
#include "case.h" #include "piece.h" #include "pion.h" //constructeur, pas de retour Case::Case() { m_piece = new Piece; } /* Case::~Case() { delete m_piece; } */ void Case::setPiece(Piece nomPiece) { m_piece = &nomPiece; } Piece Case::getPiece() { return *m_piece; }
debutPartie.cpp
#include "debutPartie.h" #include "echiquier.h" DebutPartie::DebutPartie() { Echiquier(); } void DebutPartie::lancer() { //methode deplacer // alterne le tour //juska findepartie() true }
echiquier.cpp
#include <iostream> #include <string> #include "echiquier.h" #include "piece.h" #include "case.h" #include "pion.h" using namespace std; Echiquier::Echiquier() { int ligne = 0; int col = 0; Case casePlateau[ligne][col]; Pion PN1 ; PN1.setNom("PN"); casePlateau[2][1].setPiece(PN1); /******** CEST LA QUE CA COINCE ***************************/ std::cout << (casePlateau[2][1].getPiece()).getNom() << std::endl; }
piece.cpp
#include "piece.h"f #include <iostream> #include <string> using namespace std; Piece::Piece() { } char Piece::getCouleur() { return m_couleur; } void Piece::setCouleur(char couleur) { m_couleur = couleur; } int Piece::getPosLigne() { return m_posLigne; } void Piece::setPosLigne (int ligne) { m_posLigne = ligne; } int Piece::getPosCol() { return m_posCol; } void Piece::setPosCol (int col) { m_posCol = col; } string Piece::getNom() { return m_nom; } void Piece::setNom(string nomp) { m_nom = nomp; }
pion.cpp
#include <iostream> #include <string> #include "pion.h" using namespace std; Pion::Pion() : Piece() { } string Pion::getNom() { return m_nom; } void Pion::setNom(string nomp) { m_nom = nomp; }
C'est donc dans échiquier, que je veux appeler le nom de mon pion, mais ça ne marche pas ...
Merci !
A voir également:
- [c++] Jeu d'échec - Pointeurs ...
- Mode sans echec ps4 - Guide
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Mode sans echec - Guide
5 réponses
Salut.
Sans les .h, difficile de répondre. As tu pensé à déclarer ta fonction virtuelle ?
Ton code est bien aéré et clair, mais pour la lecture à l'écran de ce site : trop de retours à la ligne, du coup on s'y perd un peu.
Sans les .h, difficile de répondre. As tu pensé à déclarer ta fonction virtuelle ?
Ton code est bien aéré et clair, mais pour la lecture à l'écran de ce site : trop de retours à la ligne, du coup on s'y perd un peu.
ma fonction virtuelle ? quezako ? je ne connais pas ...
sinon voici les h :
piece
echiquier
case
et enfin pion
sinon voici les h :
piece
#ifndef DEF_PIECE #define DEF_PIECE #include <iostream> #include <string> using namespace std; class Piece { public: Piece(); //~Piece(); char getCouleur(); void setCouleur(char couleur); int getPosLigne(); int getPosCol(); void setPosLigne(int ligne); void setPosCol(int col); string getNom(); void setNom(string nomp); protected: char m_couleur; int m_posLigne; int m_posCol; string m_nom; }; #endif
echiquier
#ifndef DEF_ECHI #define DEF_ECHI #include <iostream> #include <string> #include "case.h" using namespace std; class Echiquier { public: Echiquier(); protected: string m_nomPiece; Case casePlateau; }; #endif
case
#ifndef DEF_CASE #define DEF_CASE #include "piece.h" #include "pion.h" class Case { public: Case(); //constructeur // destructeur ? void setPiece(Piece nomPiece); Piece getPiece(); protected: // Joueur *m_joueur; Piece *m_piece; //pointeur vers une piece }; #endif
et enfin pion
#ifndef DEF_PION #define DEF_PION #include <iostream> #include <string> #include "piece.h" using namespace std; class Pion : public Piece { public: Pion(); string getNom(); void setNom(string nomp); private: string m_nom; }; #endif
Tu utilises l'héritage sans utiliser le polymorphisme, c'est dommage.
Le mieux c'est que tu te renseigne sur le polymorphisme, l'héritage et les fonctions virtuelles (virtual) en C++, je ne vais pas te refaire un cours ;-)
Dans ton programme Piece ET Pion ont toutes les deux un membre nommé m_nom (Piece::m_nom et Pion::m_nom), si tu ne déclares pas ta fonction getNom() virtuelle dans Piece, il ira chercher la fonction Piece::getNom (et donc Piece::m_nom) plutôt que la fonction Pion::getNom() (et donc Pion::m_nom).
Le mieux c'est que tu te renseigne sur le polymorphisme, l'héritage et les fonctions virtuelles (virtual) en C++, je ne vais pas te refaire un cours ;-)
Dans ton programme Piece ET Pion ont toutes les deux un membre nommé m_nom (Piece::m_nom et Pion::m_nom), si tu ne déclares pas ta fonction getNom() virtuelle dans Piece, il ira chercher la fonction Piece::getNom (et donc Piece::m_nom) plutôt que la fonction Pion::getNom() (et donc Pion::m_nom).
ok merci ! voila une chose de plus que j'ai compris !
le problème c'est que ça ça n'affiche rien :
std::cout << (casePlateau[2][1].getPiece()).getNom() << std::endl;
alors que ça oui
std::cout << PN1.getNom() << std::endl;
Pourtant PN1 devrait être dans casePlateau[2][1] ...
le problème c'est que ça ça n'affiche rien :
std::cout << (casePlateau[2][1].getPiece()).getNom() << std::endl;
alors que ça oui
std::cout << PN1.getNom() << std::endl;
Pourtant PN1 devrait être dans casePlateau[2][1] ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question