Bonjour à tous , je débute en C++ et je travaille sur projet de jeu d'échec

en ce moment ; dans un premier je voulais simplifier les chose en mettant 3 classes .
en fait chaque case s'il est vide est marquée '_' (type char) à l'affichage et les pièces par exemple Pion devra être marqué 'P' .
mon problème c'est que j'arrive à déplacer une pièce d'une case vers une autre disons case 1 vers case 2 , mais dans case 1 l'étiquette marquant le pion reste toujours au lieu de '_' pour prouver que la case est vide après déplacement d'un pion tandis que dans case 2 il est bien marqué 'P'
voici le code :
Code C/C++ :
// ProgrammeC.cpp : définit le point d'entrée pour l'application console.
//
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Case {
private:
int x ; //ligne
int y ; //colonne
char etiq ; // etiquette pour savoir si c'est un pion P ou vide '_'
public:
// getters et setters
int getX()const {return x;}
int getY()const {return y;}
void setX(int a){x = a;}
void setY(int b){y=b;}
void setEtiq(char C){etiq = C;}
char getEtiq()const{return etiq;}
// constructeur
Case();
Case(const Case& C); // constructeur par recopie je ne sais pas si la déclaration est bonne
Case(int lig,int col,char etiqette);
~Case();
void Afficher();
ostream &operator<<(Case B); // surcharge de l'operateur << afin d'afficher une case
ostream &operator<<(Case* B); // on surcharge pour pouvoir afficher un pointeur sur Case
ostream &operator=(Case B);
};
// deinition des méthodes Case
Case::Case():x(0),y(0),etiq('_'){}
Case::Case(const Case& D){
x= D.x;
y = D.y;
etiq = D.etiq;
}
Case::Case(int lig,int col,char etiqette):x(lig),y(col),etiq(etiqette){}
ostream &operator<<(ostream &out, Case B){
out << "ligne= "<<B.getX() <<" "<<"colonne= " << B.getY() <<" "<<"etiquette= "<<B.getEtiq()<< endl;
return out ;
}
ostream &operator<<(ostream &out, Case* B){
out << "ligne= "<<B->getX() <<" "<<"colonne= " << B->getY() <<" "<<"etiquette= "<<B->getEtiq()<< endl;
return out ;
}
void Case::Afficher(){
cout << "renseignement sur cette case" << *this << endl ;
}
Case::~Case(){}
// Class Piece
class Piece {
protected:
Case place; // je pensais qu'une pièce pointe sur une case
//char etiquette;
public:
Piece();
Piece(int li , int col);
~Piece();
Case getPiece()const{return place;}
//char Getetiquette()const{return etiquette;}
void setPiece( Case& B1){place = B1;}
void Afficher1();
//ostream &operator<<(Piece B) ;
};
Piece::Piece(){
//place = new Case();
//etiquette = 'P';
}
Piece::Piece(int li, int col){
place.setX(li);
place.setY(col);
}
Piece::~Piece(){}
void Piece::Afficher1(){
cout << "renseignement sur cette pièce " << "*this" << endl ;
}
/*
ostream &operator<<(ostream &out, Piece B){
out << "ligne= "<<(B.getPiece())->Afficher() << endl;
return out ;
}
*/
// classe Pion : un pion est une pièce
class Pion:public Piece {
private:
string couleur;
char etiquette ;
public:
Pion(string noir);
~Pion();
void setCouleur(string N){couleur = N;}
string getCouleur()const{return couleur;}
char getEtiquette()const{return etiquette;}
void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer
void DeplacerCase(Case& B); // délacement à partir d'une case
};
Pion::Pion(string noir){
Piece();// on fait appel au constructeur de base
couleur = "noir";
etiquette = 'P';
}
Pion::~Pion(){}
void Pion::Deplacer(int ligne , int colonne){
Piece(ligne , colonne);
place.setEtiq(etiquette);
}
void Pion::DeplacerCase(Case& C1){
int ligne1;
//on change la case
ligne1 = C1.getX();
int colonne1 = C1.getY();
char eti = this->getEtiquette();
//on change la case précedente
place.setEtiq('_');
place.setX(ligne1);
place.setY(colonne1);
C1.setEtiq(this->getEtiquette());
}
// more pointers
#include <iostream>
using namespace std;
int main ()
{
Case P1;
Case P2(2,3,'C');
P2.Afficher();
Pion P3("noir");
Pion P4("noir");
//P2.Deplacer(5,6);
P3.DeplacerCase(P2);
P1.Afficher();
P2.Afficher();
P3.DeplacerCase(P1); // ici le pion P3 se déplace dans la case P1
cout <<"après déplacement dans case P1" << endl ;
P1.Afficher();
P2.Afficher(); // ici normalement après déplacement de la case l'affichage devra être '_'
return 0;
}
console :
Code C/C++ :
renseignement sur cette caseligne= 2 colonne= 3 etiquette= C
renseignement sur cette caseligne= 0 colonne= 0 etiquette= _
renseignement sur cette caseligne= 2 colonne= 3 etiquette= P
aprÞs dÚplacement dans case P1
[b]renseignement sur cette caseligne= 0 colonne= 0 etiquette= P[/b]
renseignement sur cette caseligne= 2 colonne= 3 etiquette= P
Appuyez sur une touche pour continuer...
vos remarques seront toujours les bienvenues , en fait dans case j'ai rajouté une étiquette , car après je dois encore faire un classe plateau composé de plusieurs cases et par défaut une case vide est marquée '_'
merci d'avance
