Butin: presque terminé
This commit is contained in:
parent
f3970cf3fb
commit
d5a192d082
4 changed files with 53 additions and 23 deletions
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
struct PieceButin : public Piece {
|
struct PieceButin : public Piece {
|
||||||
friend Butin;
|
friend Butin;
|
||||||
|
friend PlateauButin;
|
||||||
|
|
||||||
enum Categorie {
|
enum Categorie {
|
||||||
Jaune = 1,
|
Jaune = 1,
|
||||||
|
|
|
@ -13,4 +13,7 @@ public:
|
||||||
|
|
||||||
// Renvoie la liste des pièces entre la pièce sélectionné et une position
|
// Renvoie la liste des pièces entre la pièce sélectionné et une position
|
||||||
std::vector<Piece *> cheminPieces(const int destX, const int destY) const;
|
std::vector<Piece *> cheminPieces(const int destX, const int destY) const;
|
||||||
|
|
||||||
|
// Vrai si la pièce sélectionnée est jaune
|
||||||
|
bool selectionJaune() const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -109,31 +109,49 @@ void Butin::event(const int x, const int y) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EnJeu: {
|
case EnJeu: {
|
||||||
if (!true) {
|
Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||||
// TODO: Si plus aucun coup n'est possible
|
// Vérifie que la pièce sélectionnée = Jaune et que la case choisie = vide
|
||||||
etape = Fini;
|
if (plateau.selectionJaune() && p == nullptr) {
|
||||||
Ecran::printMessage("Bravo !");
|
// Récupère la liste des pièces sur le chemin
|
||||||
|
std::vector<Piece *> chemin =
|
||||||
|
plateau.cheminPieces(posCurseur.first, posCurseur.second);
|
||||||
|
|
||||||
|
// Si le chemin est valide == Si des pièces sont sur le chemin
|
||||||
|
if (!chemin.empty()) {
|
||||||
|
// Déplace la pièce vers l'arrivé
|
||||||
|
plateau.moveSelection(posCurseur.first, posCurseur.second);
|
||||||
|
|
||||||
|
// Mange les pièces sur le chemin
|
||||||
|
for (auto it : chemin) {
|
||||||
|
// Récupère la pièce
|
||||||
|
std::pair<int, int> pos = it->getPos();
|
||||||
|
Piece *gain = plateau.getPiece(pos.first, pos.second);
|
||||||
|
|
||||||
|
// Retire la pièce
|
||||||
|
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
||||||
|
|
||||||
|
// Ajoute le point au joueur
|
||||||
|
joueurCourant.ajoutPiece(gain);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérification partie terminé
|
||||||
|
// TODO: Si plus aucun coup n'est possible
|
||||||
|
if (!true /* plateau.coupsPossible() */) {
|
||||||
|
etape = Fini;
|
||||||
|
Ecran::printMessage("Partie terminé ! Joueur " +
|
||||||
|
std::to_string(joueurCourant.getNum()) +
|
||||||
|
" a gagné !");
|
||||||
|
} else {
|
||||||
|
// On donne la main à l'adversaire
|
||||||
|
changerJoueurCourant();
|
||||||
|
Ecran::printMessage(msgTonTour());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// Sélectionne la pièce
|
||||||
Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
else {
|
||||||
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
||||||
if (p == nullptr) {
|
|
||||||
// TODO - Si le coup est faisable (définir dans PlateauButin ?)
|
|
||||||
if (true) {
|
|
||||||
std::pair<int, int> from =
|
|
||||||
plateau.moveSelection(posCurseur.first, posCurseur.second);
|
|
||||||
|
|
||||||
// Coordonnées de départ : (from.first , from.second)
|
|
||||||
// Coordonnées d'arrivée : (posCurseur.first, posCurseur.second)
|
|
||||||
// TODO: Récupérer la/les pièce/s entre ces 2 coordonnées (définir dans
|
|
||||||
// PlateauButin ?)
|
|
||||||
// et ajouter les points aux joueurs
|
|
||||||
|
|
||||||
// On donne la main à l'adversaire
|
|
||||||
changerJoueurCourant();
|
|
||||||
Ecran::printMessage(msgTonTour());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -91,3 +91,11 @@ std::vector<Piece *> PlateauButin::cheminPieces(const int destX,
|
||||||
|
|
||||||
return chemin;
|
return chemin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PlateauButin::selectionJaune() const {
|
||||||
|
if (selection) {
|
||||||
|
return dynamic_cast<PieceButin *>(selection)->points == PieceButin::Jaune;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
Reference in a new issue