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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| class Case
{
public:
/* La position d'une case permet d'en déterminer sa couleur...
* nous allons donc simplement construire la case en lui indiquant
* ses coordonnées et les informations relatives à la pièce qui se
* trouve dessus. Par défaut, ces dernières informations représentent
* le fait qu'il n'y a pas de pièce :D
*/
Case(int posx, int posy, Piece * p= NULL): position_(posx,posy),
piece_(p)
{
piece_.couleur=cpiece;
piece_.etat=epiece;
}
/* il faudra un peu chipoter pour déterminer la couleur de la case,
* mais la simple logique peut suffire:
* si la position est invalide, ce n'est pas une couleur, autrement
* si la formule (y-1)*8 + (x-1) donne une valeur paire, c'est une
* case noire, sinon, c'est une case blanche :D
*/
Couleur couleur() const
{
if(!position_.isValid())
return aucuneCouleur;
if( (y-1)*8+x-1%2 == 0)
return noir;
return blanc;
}
/* il faut savoir si on peut poser une pièce sur la case...
* on ne peut le faire que si la couleur de la case est blanc
*/
bool estValide() const{return couleur==blanc;}
/* il faut pouvoir savoir s'il y a une pièce, sa couleur et son état
*/
bool estCouvert() const{return piece_!=0;}
Couleur couleurPiece() const
{
if(!piece_)
return aucuneCouleur;
return piece_->couleur();
}
Etat etatPiece() const
{
if(!piece_)
return aucunePiece;
return piece_->etat();
}
/* et il faut pouvoir modifier la présence (ou l'absence) de piece
*/
void placerPiece(Piece * p=NULL)
{
/* on refuse de placer une pièce s'il y en a déjà une :D */
assert( (piece_==NULL && p!=NULL) ||
(piece_!=NULL && p==NULL) );
piece_=p
}
/* c'est vraiment pour l'expressivité :D */
void retirerPiece(){placerPiece();}
private:
Position position_;
Piece * piece_;
}; |
Partager