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

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