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 64
|
/* L'échiquier, là où tout se joue... */
class Echiquier
{
public:
Echiquier()
{
/* rajouter les 64 cases (vides dans un premier temps) */
for(int i=0;i<8;++i)
for(int j=0;j<8;++j)
case_.push_back(Case(i,j));
/*créer les 32 pièces */
for(int i=0;i<8) /* les 16 pions */
{
ingame_.push_back(new Pion(blanc, i,1));
ingame_.push_back(new Pion(noir,i,6));
}
/* les quatre tours */
ingame_.push_back(new Tour(blanc,0,0));
ingame_.push_back(new Tour(blanc,7,0));
ingame_.push_back(new Tour(noir,0,7));
ingame_.push_back(new Tour(noir,7,7));
/* les quatre cavaliers */
ingame_.push_back(new Cheval(blanc, 1,0));
ingame_.push_back(new Cheval(blanc,7,0));
ingame_.push_back(new Cheval(noir,1,0));
ingame_.push_back(new Cheval(noir,1,7));
/* tu as compris le principe :D */
/* créer la relation entre les pièces et les cases */
for(std::vector<Pieces *>::iterator it=ingame_.begin();
it!=ingame_.end();++it)
{
case_[(*it)->posX()*8 +(*it)->posy()]=(*it);
}
}
~Echiquier()
{
/* on détruit correctement les pieces restant en jeu */
for(std::vector<Piece*>::iterator it=ingame_.begin();
it!=ingame_.end();++it)
delete (*it);
/* et les pièces qui ont été mise "hors jeu" */
for(std::vector<Piece*>::iterator it=removed_.begin();
it!=removed_.end();++it)
delete (*it);
}
Case & caseAt(int x, int y){return case_[x*8+y];}
Case const & caseAt() const{return case_[x*8+y];}
void removeFromGame(Piece * p)
{
/* on transfert la piece p de "ingame_" à "removed_" */
removed_.push_back(p);
for(std::vector<Piece*>::iterator it=ingame_.begin();
it!=ingame_.end(); ++it)
if((*it)==p)
ingame_.erase(it);
}
bool estMat(eCouleur) const;
bool estPat(eCouleur) const;
private:
std::vector<Piece*> ingame_; /* les pièces "en jeu" */
std::vector<Piece*> removed_; /* les pièces "hors jeu" */
std::vector<Case> case_; /* les cases de l'échiquier */
}; |
Partager