Butin: presque terminé

This commit is contained in:
Mylloon 2023-12-31 03:46:18 +01:00
parent f3970cf3fb
commit d5a192d082
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
4 changed files with 53 additions and 23 deletions

View file

@ -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,

View file

@ -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;
}; };

View file

@ -109,32 +109,50 @@ void Butin::event(const int x, const int y) {
break; break;
} }
case EnJeu: { case EnJeu: {
if (!true) {
// TODO: Si plus aucun coup n'est possible
etape = Fini;
Ecran::printMessage("Bravo !");
}
// TODO
Piece *p = getPiece(posCurseur.first, posCurseur.second); Piece *p = getPiece(posCurseur.first, posCurseur.second);
plateau.modifierSelection(posCurseur.first, posCurseur.second); // Vérifie que la pièce sélectionnée = Jaune et que la case choisie = vide
if (p == nullptr) { if (plateau.selectionJaune() && p == nullptr) {
// TODO - Si le coup est faisable (définir dans PlateauButin ?) // Récupère la liste des pièces sur le chemin
if (true) { std::vector<Piece *> chemin =
std::pair<int, int> from = 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); plateau.moveSelection(posCurseur.first, posCurseur.second);
// Coordonnées de départ : (from.first , from.second) // Mange les pièces sur le chemin
// Coordonnées d'arrivée : (posCurseur.first, posCurseur.second) for (auto it : chemin) {
// TODO: Récupérer la/les pièce/s entre ces 2 coordonnées (définir dans // Récupère la pièce
// PlateauButin ?) std::pair<int, int> pos = it->getPos();
// et ajouter les points aux joueurs 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 // On donne la main à l'adversaire
changerJoueurCourant(); changerJoueurCourant();
Ecran::printMessage(msgTonTour()); Ecran::printMessage(msgTonTour());
} }
} }
}
// Sélectionne la pièce
else {
plateau.modifierSelection(posCurseur.first, posCurseur.second);
}
break; break;
} }

View file

@ -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;
}