Jeu d'echec C++

CKBT Messages postés 2 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 2 avril 2012 - 2 avril 2012 à 02:49
CKBT Messages postés 2 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 2 avril 2012 - 2 avril 2012 à 19:29
bonjour,
Je débute en programmation C++, je dois réaliser un pseudo jeu d'echec.
Mais j'ai un soucis au niveau de l'echiquier.
Je veux utiliser un tableau de pointeur de type piece mais à la compilation j'ai ce message d'erreur:

(Exception non géree .......dans Echec.exe)

Pouvez vous me dire ce qui ne va pas dans mon code? svp!!!!!!!

Mon projet est composé des classes suivantes:

Position
#include "Position.h"
#include 
using namespace std;

Position::Position()
{
l=0;
c=0;
}
Position::Position(int a, int b)//constructeur par copie
{
l=a;
c=b;

}

Position::Position(const Position & p)//acces en lectrue
{
l=p.l;
c=p.c;
}
/*inline int  Chaine::getTaille(void) const { return _t; }
inline void Chaine::setTaille(int t) { _t=t; */
int  Position::getLigne()const
{

return l;
}
int  Position::getColonne()const
{
return c;
}

void Position::setLigne(int _l)
{
l=_l;

}
void Position::setColonne(int _c)
{
c=_c;
}

bool Position::operator==(Position const &p)const
{
return ((this->l==p.l)&&(this->c==p.c));
}
//Position  Position::operator=(int a)
//{
//	l= a;
//	c=a;
//	return ;
//}


Piece(classe mere)
#include "Piece.h"
#include "Position.h"
#include "PositionEchiquierException.h"
#include 
#include <sstream>
using namespace std;

Piece::Piece(char symbole, int valeur, char couleur,Position p)
{

}
Piece::Piece()
{

}

int Piece::getValeur()const
{
return valeur;
}
char Piece::getSymbole()const
{
return symbole;
}
Position Piece::getPosition()const
{
return p;
}
char Piece:: getCouleur()const
{
return couleur;
}

void Piece:: setValeur(int a)
{
valeur=a;
}
void Piece::setCouleur(char c)
{
couleur=c;
}

void Piece::setSymbole(char s)
{
symbole=s;
}
void Piece::setPosition(Position _p)
{
p=_p;

}

char Piece::asChar()
{
char s=' ';

if(getCouleur()=='B')
{
s=putchar(toupper(getSymbole()));;
}
else if(getCouleur()=='N')
s=putchar(tolower(getSymbole()));
return s;
}
const string Piece::toDebug()
{

string s;
stringstream sst, ssl;
sst


using namespace std;
#include <sstream>

Pion::Pion(char symbole, int valeur,char couleur, Position p):Piece('P', 1, couleur,p)
{

}


Pion::Pion()
{
}

void Pion::deplacement()
{
int ligne=p.getLigne();

if (getCouleur()=='B')
p.setLigne(ligne+1);
else if(getCouleur()=='N')
p.setLigne(ligne-1);
cout<<"deplacement fait!!!!!!";

}

const string Pion::toDebug()
{
string s;
stringstream sst, ssl;
sst<roi
[code=cpp]#include "Roi.h"
#include <string>
#include<sstream>
using namespace std;


Roi::Roi(char s, int val,char couleur, Position p):Piece('R', 10, couleur,p)
{
}


Roi::~Roi(void)
{
}
void Roi:: deplacement()
{
char dir;
cout<<"dans quelle direction? v h d";
cin>>dir;

int c;
int ligne;
char sens;
switch(dir)
{
case 'v':
cout<<"saisissez un sens h ou b"<<endl;
cin>>sens;
if (sens=='h')
{
ligne=p.getLigne()+1;
p.setLigne(ligne);
}
else
{
ligne=p.getLigne()-1;
p.setLigne(ligne);
}
break;
case 'h':
cout<<" sens d ou g"<<endl;
cin>> sens;
c= p.getColonne();
if(sens='d')			
p.setColonne(c+1);
else		
p.setColonne(c-1);

break;
case 'd':

c=p.getColonne();
ligne= p.getLigne();		break;
}
}





->Cavalier
#include "Cavalier.h"
#include <string>
#include <sstream>
using namespace std;


Cavalier::Cavalier(char s, int val,char couleur, Position p):Piece('C', 3, couleur,p)
{

}



Cavalier::Cavalier()
{
}


void Cavalier::deplacement( )
{
char dir;
cout<<"donnez une direction verticale v horizontal h"<<endl;
cin>>dir;
int colonne;
int ligne;
char sens;
if(dir=='h')
{				
cout<<" d pour droite g pour gauche"<<endl;
cin>>sens;

if(sens=='d')
{ 
colonne=p.getColonne()+1;
p.setColonne(colonne);
cout<<" h pr haut b pour bas"<<endl;
cin>>sens;
if(sens=='h')
{
ligne=p.getLigne()+2;
p.setLigne(ligne);
}
else
{
ligne=p.getLigne()-2;
p.setLigne(ligne);
}
}
else
{
colonne=p.getColonne()-1;
p.setColonne(colonne);
}
}
else//direction verticale
{
cout<<" h pr haut b pour bas"<<endl;
cin>>sens;

if(sens=='h')
{ 
ligne=p.getLigne()+1;
p.setLigne(ligne);
cout<<" d pour droite g pour gauche"<<endl;
cin>>sens;
if(sens=='d')
{
colonne=p.getColonne()+2;
p.setColonne(colonne);
}
else
{
colonne=p.getColonne()-2;
p.setColonne(colonne);
}
}
else
{
ligne=p.getLigne()-1;
p.setLigne(ligne);
}
}
cout<<"le deplacement a ete fait";
}

const string Cavalier::toDebug()
{

string s;
stringstream sst, ssl;
sst<0;i--)
{
cout<<endl<<i;
for(int j=0;j<8;j++)
{
if(ptab[i][j]=NULL)
cout<<"|--";
else
cout<asChar();

}
}
}

CKBT

3 réponses

BunoCS Messages postés 15480 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 12 juin 2024 103
2 avril 2012 à 09:27
Hello,
mais à la compilation j'ai ce message d'erreur

Non, non...c'est plutôt à l'exécution, ça...
Là, comme ça, on ne va pas pouvoir t'aider. Essaies de le lancer en debug, pas-à-pas et voir ce qui cloche...

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cptpingu Messages postés 3838 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 17 juin 2024 123
2 avril 2012 à 10:27
Quelques conseils:
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Si tu retournes un élément par copie inutile de lui adjoindre "const". Ex: "const std::string pouet()" devrait être "std::string pouet()".
- "~Echiquier(void)" en C++, une fonction sans argument ne prend pas "void" mais rien du tout. Devrait être "~Echiquier()".
- Préfère 0 à NULL, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp
- Les attributs de classe sont généralement différenciés des autres par un "_". À la place de l et c, tu devrais plutôt avoir _l, _c.
- Utilise toujours la liste d'initialisation plutôt que d'initialiser tes variables dans le constructeur. Ex:
Position::Position()
{
  l=0;
  c=0;
}

devrait être
Position::Position()
 : _l(0), _c(0)
{
}

- Pense à activer les warnings, parce qu'il y a plein de petites erreurs qu'un compilateur devrait normalement t'indiquer (notamment les const inutiles).

Enfin, au niveau du code, ceci me choque:
"for(int i=8; i>0;i--)"
Si ton échiquier est un tableau de 8x8, alors les bornes sont 0..7. Or ici, tu a 8 ! Donc tu dépasses les bornes. "int i = 7" serait préférable.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
CKBT Messages postés 2 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 2 avril 2012
2 avril 2012 à 19:29
Merci pour vos conseils!!
ciao ciao


CKBT!!
0
Rejoignez-nous