diff --git a/includes/Safari/PlateauSafari.hpp b/includes/Safari/PlateauSafari.hpp index 458d023..ab64878 100644 --- a/includes/Safari/PlateauSafari.hpp +++ b/includes/Safari/PlateauSafari.hpp @@ -3,13 +3,7 @@ #include "../Plateau.hpp" #include "PieceSafari.hpp" -class PlateauSafari : public Plateau { - // Barrières - std::vector barrieres; - - PositionMutable placeholderBarriere; - -public: +struct PlateauSafari : public Plateau { PlateauSafari(); virtual ~PlateauSafari(); @@ -20,15 +14,24 @@ public: bool deplacementValide(const int destX, const int destY) const; // Renvoie la position du placeholder - Position getPlaceholderBarriere(); + Position getPlaceholderBarriere() const; // Modifie la position du placeholder void setPlaceholderBarriere(const int x, const int y); // Avec les positions du placeholder et les positions données // Vérifie que les 2 points sont à côtés - bool validWithPlaceholder(const int x, const int y); + bool validWithPlaceholder(const int x, const int y) const; // Place la barrière, renvoie si on a réussi bool placementBarriere(const int x, const int y); + + // Renvoie le nombre d'animaux jouable par le joueur courant + int zoneDeplacementOk() const; + +private: + // Barrières + std::vector barrieres; + + PositionMutable placeholderBarriere; }; diff --git a/includes/Safari/Safari.hpp b/includes/Safari/Safari.hpp index 398d501..17f5f64 100644 --- a/includes/Safari/Safari.hpp +++ b/includes/Safari/Safari.hpp @@ -18,6 +18,9 @@ class Safari : private Jeu { // et placer sa barrière bool deplacerAnimal, placerBarriere; + // Vérifie si les joueurs peuvent encore jouer + int joueursEnVie; + // Etape du jeu, pour savoir où on en est enum Etape { ChoixJ1 = 0, diff --git a/src/Safari/PlateauSafari.cpp b/src/Safari/PlateauSafari.cpp index ad07b82..88988e7 100644 --- a/src/Safari/PlateauSafari.cpp +++ b/src/Safari/PlateauSafari.cpp @@ -187,7 +187,7 @@ bool PlateauSafari::deplacementValide(const int x, const int y) const { return (x == posInitiale.first || y == posInitiale.second); } -Position PlateauSafari::getPlaceholderBarriere() { +Position PlateauSafari::getPlaceholderBarriere() const { return placeholderBarriere; } @@ -195,7 +195,7 @@ void PlateauSafari::setPlaceholderBarriere(const int x, const int y) { placeholderBarriere = std::make_pair(x, y); } -bool PlateauSafari::validWithPlaceholder(const int x, const int y) { +bool PlateauSafari::validWithPlaceholder(const int x, const int y) const { const int diffX = std::abs(placeholderBarriere.first - x); const int diffY = std::abs(placeholderBarriere.second - y); @@ -221,3 +221,12 @@ bool PlateauSafari::placementBarriere(const int x, const int y) { return true; } + +// TODO +int PlateauSafari::zoneDeplacementOk() const { + // Compte le nombre de joueurs qui ont encore des + // zones valides + // Zone valide = animal possède une zone de déplacement de mini 8 cases + + return false; +} diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index ea2a0ed..9b1d923 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -1,12 +1,13 @@ #include "../../includes/Safari/Safari.hpp" #include "../../includes/Ecran.hpp" -/* Contrairement aux autres jeux ici on donne des pointeurs et pas des - * références vu que j3 peut ne pas exister (default to nullptr) - * Je sais pas trop si c'est une bonne idée, à méditer */ Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3) : Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3}, - deplacerAnimal(false), placerBarriere(false), barrieres(0) { + deplacerAnimal(false), placerBarriere(false), joueursEnVie(3), + barrieres(0) { + if (joueur3 == nullptr) { + --joueursEnVie; + } Ecran::printMessage(msgChoixAnimal()); etape = ChoixJ1; } @@ -226,11 +227,17 @@ void Safari::event(const int x, const int y) { } } + // Vérifie si le joueur pourra encore jouer + // Càd au moins 1 animal possède une zone de déplacement d'au moins 8 cases + if (plateau.zoneDeplacementOk() == 0) { + --joueursEnVie; + } + if (deplacerAnimal && placerBarriere) { - // TODO: Vérification partie terminée - // Càd 1 ou 0 animal possède une zone de déplacement d'au moins 8 cases - if (false) { + // Vérification partie terminée + if (joueursEnVie <= 1) { etape = Fini; + // TODO: Afficher le joueur gagnant (s'il y en a un) Ecran::printMessage("Partie terminée !"); } else { // Le joueur a fini son tour