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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| enum Couleur
{
Noir,
Blanc,
Aucun // pour permettre à la case de répondre à la question de
// savoir si il y a une piece sur elle
};
struct Coordonnee
{
int posX;
int posY;
Coordonnee():posX(),posY(){}
};
class Pion
{
public:
Pion(Couleur coul):coul(coul),coord()
Coordonnee& const coordonnee() const{return coord;}
void setCoordonnee(int ligne, int colonne)
{
coord.posX = ligne;
coord.posY = colonne;
}
private:
Coordonnee coord;
}
class Case
{
public:
Case(int ligne, int colonne):coul(Aucun), coord(ligne, colonne){}
void setCouleur(Couleur c){coul=c;}
bool AccepteSurvol(Couleur c) const
{return (coul!=Aucun && c!=coul);}
bool AccepteArrivee() const {return coul==Aucun;}
Coordonnee const & coorodonnee() const{return coord;}
private:
Couleur coul;
Coordonnee coord;
/* la gestion de la coordonnée d'une case n'est peut
*etre pas nécessaire
*/
};
bool AtCoord(Pion const & p, Coordonnee const& c)
{return p.coordonnee().posX==c.posX && p.coordonnee().posY==c.posY;}
class Joueur
{
public:
Joueur(Couleur coul, Damier* dam):coul(coul), dam(dam)
{
// je crois qu'il y a 12 pions par joueur...
// à modifier si c'est un autre nombre
for(int i= 0; i<12:++i)
pions.push_back(Pion(coul));
dam->register(pions, coul);
}
bool deplace(Coordonnee const& depart, coordonnee const & arrivee)
{
/* 1- recherche du pion se trouvant sur depart... renvoie
* false si non trouvé
*/
return dam->Move(adresse_pion_trouve,arrivee)
}
private:
Damier* dam;
std::vector<Pion> pions;
}
class Damier
{
public:
Damier()
{
// je crois que c'est 8 cases sur 8
for(int ligne = 1;ligne <9;++ligne )
for (int colonne j = 1;i<9;++i)
cases.insert(
std::make_pair(std::make_pair(ligne,colonne),
Case(ligne, colonne))):
}
void register(std::vector<Pion> tab)
{
/*placement des pions sur l'échiquier et enregistrement des pions*/
}
bool Move(Pion * p, Coordonnee const & arrivee)
{
/* 1- vérification du trajet
* 2- dépalcement du pion
* 3- "désenregistrement" des pions bouffés
* renvoie faux si le mouvement n'est pas accepté, vrai s'il
* a pu avoir lieu
*/
}
private:
std::map<std::pair<int, int>,Case) cases;
std::vector<Pion*> pions;
void unregister(Pion* p)
{
/* 1- signale au pion qu'il n'est plus sur une case */
p->setCoordonnee(0,0)
/* 2- recherche et suppression du pointeur du vecteur (sans
* désallocation)
*/
}
}; |
Partager