diff --git a/includes/Safari/Safari.hpp b/includes/Safari/Safari.hpp index cf093ef..29444eb 100644 --- a/includes/Safari/Safari.hpp +++ b/includes/Safari/Safari.hpp @@ -14,6 +14,10 @@ class Safari : private Jeu { Joueur &joueur2; Joueur *joueur3; + // Savoir si le joueur courant à déjà déplacer son animal + // et placer sa barrière + bool deplacerAnimal, placerBarriere; + // Etape du jeu, pour savoir où on en est enum Etape { ChoixJ1 = 0, @@ -32,6 +36,7 @@ class Safari : private Jeu { // Permet de transformer une Piece en PieceSafari PieceSafari *getPiece(const int x, const int y) const; + PieceSafari *getPiece(Piece *) const; // Position curseur const std::pair getPosition() const override; diff --git a/src/Safari/PlateauSafari.cpp b/src/Safari/PlateauSafari.cpp index bfd4376..29f7a30 100644 --- a/src/Safari/PlateauSafari.cpp +++ b/src/Safari/PlateauSafari.cpp @@ -28,9 +28,9 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const { // Pièces sf::CircleShape rhinoceros(tailleCellule / 3, 3); - // rhinoceros.setOutlineThickness(2.); + rhinoceros.setOutlineThickness(2.); sf::CircleShape elephant(tailleCellule / 3, 6); - // elephant.setOutlineThickness(2.); + elephant.setOutlineThickness(2.); sf::CircleShape lion(tailleCellule / 3); lion.setOutlineThickness(2.); diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index 5b2ac49..6864794 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -6,7 +6,7 @@ * 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}, - barrieres(0) { + deplacerAnimal(false), placerBarriere(false), barrieres(0) { plateau.initialiserPlateau(); Ecran::printMessage(msgChoixAnimal()); etape = ChoixJ1; @@ -29,6 +29,10 @@ PieceSafari *Safari::getPiece(const int x, const int y) const { return dynamic_cast(plateau.getPiece(x, y)); } +PieceSafari *Safari::getPiece(Piece *piece) const { + return dynamic_cast(piece); +} + const std::string Safari::msgChoixAnimal() const { return "Joueur " + std::to_string(joueurCourant->getNum()) + ", choississez un animal."; @@ -37,14 +41,20 @@ const std::string Safari::msgChoixAnimal() const { const std::string Safari::msgPlacement() const { return "Joueur " + std::to_string(joueurCourant->getNum()) + ", placez votre " + - dynamic_cast(joueurCourant->getPieces().at(0)) - ->getName() + - "."; + getPiece(joueurCourant->getPieces().at(0))->getName() + "."; } const std::string Safari::msgTonTour() const { - return "Joueur " + std::to_string(joueurCourant->getNum()) + - ", c'est votre tour de placer une barrière."; + std::string action; + if (!deplacerAnimal) { + action = + "déplacez un " + getPiece(joueurCourant->getPieces().at(0))->getName(); + } else { + action = "placez une barrière"; + } + + return "Joueur " + std::to_string(joueurCourant->getNum()) + ", " + action + + "."; } void Safari::play() { @@ -127,17 +137,21 @@ void Safari::event(const int x, const int y) { choixJoueur(ChoixJ2); break; } + + // Choix animal J2 case ChoixJ2: { - // Choix animal J2 choixJoueur(ChoixJ3); break; } + + // Choix animal J3 case ChoixJ3: { - // Choix animal J3 choixJoueur(Placement); Ecran::printMessage(msgPlacement()); break; } + + // Placement des animaux case Placement: { const Piece *p = getPiece(posCurseur.first, posCurseur.second); // Vérifie que la case choisie est vide @@ -165,7 +179,46 @@ void Safari::event(const int x, const int y) { break; } + case EnJeu: { + const Piece *p = getPiece(posCurseur.first, posCurseur.second); + + // Si la case cliquée est vide + if (p == nullptr) { + bool justChanged = false; + + // Déplacer un animal + if (!deplacerAnimal) { + // TODO: Vérifier que le déplacement est correct + plateau.moveSelection(posCurseur.first, posCurseur.second); + justChanged = true; + deplacerAnimal = true; + Ecran::printMessage(msgTonTour()); + } + + // Poser une barrière + if (!placerBarriere && !justChanged) { + // TODO + } + + if (deplacerAnimal && placerBarriere) { + // Le joueur a fini son tour + // Réinitialise les variables + deplacerAnimal = false; + placerBarriere = false; + + // Donne la main au joueur suivant + changerJoueurCourant(); + Ecran::printMessage(msgTonTour()); + } + } else { + // Vérifie que la pièce est à nous + if (getPiece(posCurseur.first, posCurseur.second)->getCategory() == + getPiece(joueurCourant->getPieces().at(0))->getCategory()) { + // On sélectionne la pièce + plateau.modifierSelection(posCurseur.first, posCurseur.second); + } + } break; } case Fini: {