begin process at 2012 05 30 10:47:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Projet jeux d'échecs : déplacement d'une pièce dans une case


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Projet jeux d'échecs : déplacement d'une pièce dans une case

lundi 1 mars 2010 à 21:50:39 | Projet jeux d'échecs : déplacement d'une pièce dans une case

Razily

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
mardi 2 mars 2010 à 11:53:11 | Re : Projet jeux d'échecs : déplacement d'une pièce dans une case

dragonjoker59

Dans ton 2eme déplacement, tu ne modifies pas la case P2, tu attribues a P1 l'étiquette de P3, mais comme tu n'as jamais dit à P3 que sa case est P2, P2 n'est pas modifiée quand tu redéplaces P3.

Vu que tu dois faire un plateau, autant que ce soit lui qui ait les cases et les pièces en statique et soit :
-les pièces ont des pointeurs sur les cases du plateau. Ainsi, quand tu déplacerais une pièce, elle pointerait sur sa nouvelle case
-les cases ont des pointeurs sur les pièces qui sont dessus (NULL quand pas de pièce)
-Les 2 en même temps


Coin coin !
mardi 2 mars 2010 à 12:26:45 | Re : Projet jeux d'échecs : déplacement d'une pièce dans une case

Razily

salut ,
oui mais quand tu dis j'attribue à P1 l'étiquette de P3 et vu que P3 est un pion avec etiquette 'P'l'étiquette de la case P1 sera aussi 'P' . et après qd je déplace vers une autre case en partant de P1 toujours le même pion comment faire pour que la case P1 reprenne son étiquette initiale '_' ??
mardi 2 mars 2010 à 13:40:59 | Re : Projet jeux d'échecs : déplacement d'une pièce dans une case

dragonjoker59

C'est pour ça que je pense qu'il faut que tu stockes tes cases en dur quelque part (classe plateau par exemple) et que tes pions n'aient qu'un pointeur sur leur case actuelle, du coup dans ta fonction DeplacerCase, tu peux faire ceci :
Code C/C++ :
void Pion::DeplacerCase( Case * C1)
{
	if (place != NULL)
	{
		place->setEtiq( '-');
	}
	place = C1;
	if (place != NULL)
	{
		place->setEtiq( this->getEtiquette());
	}
}



Coin coin !


Cette discussion est classée dans : int, afficher, p1, case, pion


Répondre à ce message

Sujets en rapport avec ce message

Ou est l'erreur [ par nazca ] Le Zero de la programmationNazcaj'aimerai savoir ou est l'erreur de mon programme,surtout pourkoi j'ai pas le droit de mettre Diff dans ma boucle Nomb New et Delete [ par Tyroflan ] juste une questionsi j'ai ceci : int *p1;...main(){int pipi;cin >> pipi;p1 = new int [pipi];...delete[pipi] p1; ou bien delete[] p1;}MAISje procède un tableaux de permutation [ par sturnarbo ] /*Ecrire un programme qui range les éléments d'un tableau A du type int dansl'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et une vari sturnarbo [ par sturnarbo ] ENONCE:/*Ecrire un programme qui range les éléments d'un tableau A du type int dansl'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et u Dumb debutant [ par akumageorges ] Bonjour tout le monde,je suis nouveau dans le site et debutant en programmation(utilisant C++).J'ecris juste pour demande de l'aide dans la constructi Affichage---pointeur [ par amin79 ] J'ai ce code et je n'arrive pas à afficher le contenu de a[10]. Comment faire.#include/*a[i] est un tableau dont tous ses éléments sont initialisés à Afficher une image avec gtkmm [ par naika585 ] Bijour tt l'monde !Je developpe une interface avec gtkmm.Mon pb est le suivant : je veux afficher une image avec gtkmm, mais sans passer par le nom du [C++] Problème en POO [ par Tijee ] Bonjour à tous.Voila, j'ai fait un petit moteur 2D avec SDL compilé avec Dev-Cpp, il est simple mais fonctionne très bien. J'aimerais parvenir au même Afficher un int dans une MessageBox [ par Oumbre ] Salut les gens !Je voudrais savoir comment on faisait pour afficher la valeur d'une variable dans une MessageBox.Thx"Quand tu mets une capote au bout ou sont les erreurs? [ par nazca ] Le Zero de la programmationNazcaj'aimerai savoir si quelqu'un pourrai me dire ou son les erreur dans mon programme,car apres la compilation il me dit


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales