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 {
friend Butin;
friend PlateauButin;
enum Categorie {
Jaune = 1,

View file

@ -13,4 +13,7 @@ public:
// 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;
// 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;
}
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);
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 =
// Vérifie que la pièce sélectionnée = Jaune et que la case choisie = vide
if (plateau.selectionJaune() && p == nullptr) {
// 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);
// 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
// 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());
}
}
}
// Sélectionne la pièce
else {
plateau.modifierSelection(posCurseur.first, posCurseur.second);
}
break;
}

View file

@ -91,3 +91,11 @@ std::vector<Piece *> PlateauButin::cheminPieces(const int destX,
return chemin;
}
bool PlateauButin::selectionJaune() const {
if (selection) {
return dynamic_cast<PieceButin *>(selection)->points == PieceButin::Jaune;
}
return false;
}