diff --git a/includes/Butin/Butin.hpp b/includes/Butin/Butin.hpp index c990bd0..a8c21f3 100644 --- a/includes/Butin/Butin.hpp +++ b/includes/Butin/Butin.hpp @@ -3,6 +3,8 @@ #include "../Jeu.hpp" #include "PlateauButin.hpp" +struct PieceButin; + class Butin : private Jeu { friend std::ostream &operator<<(std::ostream &, const Butin &); @@ -22,6 +24,8 @@ class Butin : private Jeu { enum Etape etape; + PieceButin *getPiece(const int x, const int y) const; + public: Butin(Joueur &joueur1, Joueur &joueur2); // constructor virtual ~Butin(); // destructor diff --git a/includes/Butin/PieceButin.hpp b/includes/Butin/PieceButin.hpp index b6ec275..81bbfb5 100644 --- a/includes/Butin/PieceButin.hpp +++ b/includes/Butin/PieceButin.hpp @@ -1,8 +1,11 @@ #pragma once #include "../Piece.hpp" +#include "Butin.hpp" struct PieceButin : public Piece { + friend Butin; + enum Categorie { Jaune = 1, Rouge = 2, diff --git a/src/Butin/Butin.cpp b/src/Butin/Butin.cpp index c406717..5da3d14 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -1,4 +1,5 @@ #include "../../includes/Butin/Butin.hpp" +#include "../../includes/Butin/PieceButin.hpp" #include "../../includes/Ecran.hpp" Butin::Butin(Joueur &j1, Joueur &j2) @@ -14,6 +15,10 @@ std::ostream &operator<<(std::ostream &out, const Butin &data) { return out; } +PieceButin *Butin::getPiece(const int x, const int y) const { + return dynamic_cast(plateau.getPiece(x, y)); +} + void Butin::init() { plateau.initialiserPlateau(); @@ -47,36 +52,48 @@ void Butin::event(const int x, const int y) { } switch (etape) { - case (Etape::ChoixJ1): + case (Etape::ChoixJ1): { // Clic du J1 - // TODO: Vérifier que la pièce est jaune - if (true) { - // TODO: retirer une pièce + // Vérifier que la pièce est jaune + if (getPiece(posCurseur.first, posCurseur.second)->points == + PieceButin::Jaune) { + + // Retire la pièce + plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr); // On passe à l'étape suivante etape = ChoixJ2; Ecran::printMessage( "Joueur 2, retirez une piece jaune en cliquant dessus."); + } else { + Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant " + "dessus. Mauvaise Pièce."); } break; - case ChoixJ2: + } + case ChoixJ2: { // Clic du J2 - // TODO: Vérifier que la pièce est jaune - if (true) { - // TODO: retirer une pièce + // Vérifier que la pièce est jaune + if (getPiece(posCurseur.first, posCurseur.second)->points == + PieceButin::Jaune) { + // Retire la pièce + plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr); // On passe à l'étape suivante etape = EnJeu; } break; - case EnJeu: + } + case EnJeu: { // TODO break; - case Fini: + } + case Fini: { // TODO: Afficher le nom du gagnant Ecran::printMessage("Bravo !"); break; } + } // Texte de debug std::cout << "Clic souris @ (" << x << ", " << y << ") aka ("