From 00bf91b25cde7c2da95a7da5cc99f6bbd83256ea Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 7 Jan 2024 22:56:16 +0100 Subject: [PATCH] =?UTF-8?q?v=C3=A9rification=20endgame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/Safari/PlateauSafari.hpp | 4 ++++ src/Safari/PlateauSafari.cpp | 29 +++++++++++++++++------------ src/Safari/Safari.cpp | 24 ++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/includes/Safari/PlateauSafari.hpp b/includes/Safari/PlateauSafari.hpp index c3daa77..06d82b9 100644 --- a/includes/Safari/PlateauSafari.hpp +++ b/includes/Safari/PlateauSafari.hpp @@ -10,6 +10,10 @@ struct PlateauSafari : public Plateau { // Fonction pour afficher le plateau vers une sortie void afficherPlateau(std::ostream &, const bool debug = false) const override; + // Pareil que deplacementValide mais est utilisable avec des coordonnées + bool deplacementValideCoor(const int x1, const int y1, const int x2, + const int y2) const; + // Vérifie que le déplacement est valide bool deplacementValide(const int destX, const int destY) const; diff --git a/src/Safari/PlateauSafari.cpp b/src/Safari/PlateauSafari.cpp index df4f6f6..608d0c1 100644 --- a/src/Safari/PlateauSafari.cpp +++ b/src/Safari/PlateauSafari.cpp @@ -148,13 +148,8 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const { } } -bool PlateauSafari::deplacementValide(const int x, const int y) const { - if (!selection) { - return false; - } - - Position posInitiale = selection->getPos(); - +bool PlateauSafari::deplacementValideCoor(const int x1, const int y1, + const int x2, const int y2) const { // Vérifier qu'il n'y a pas de barrière sur le chemin for (PieceSafari *barriere : barrieres) { Position pos1 = barriere->getPos(); @@ -176,15 +171,25 @@ bool PlateauSafari::deplacementValide(const int x, const int y) const { // Vérifier les conditions pour le point posBarriere sur // le segment posInitiale - (x, y) - if (posBarriere.first >= std::min(posInitiale.first, x) && - posBarriere.first <= std::max(posInitiale.first, x) && - posBarriere.second >= std::min(posInitiale.second, y) && - posBarriere.second <= std::max(posInitiale.second, y)) { + if (posBarriere.first >= std::min(x1, x2) && + posBarriere.first <= std::max(x1, x2) && + posBarriere.second >= std::min(y1, y2) && + posBarriere.second <= std::max(y1, y2)) { return false; } } - return (x == posInitiale.first || y == posInitiale.second); + return (x2 == x1 || y2 == y1); +} + +bool PlateauSafari::deplacementValide(const int x, const int y) const { + if (!selection) { + return false; + } + + Position posInitiale = selection->getPos(); + + return deplacementValideCoor(posInitiale.first, posInitiale.second, x, y); } Position PlateauSafari::getPlaceholderBarriere() const { diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index 5c63cc0..973e65c 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -289,8 +289,28 @@ int Safari::zoneDeplacementOk() const { int nbAnimaux = 0; for (Piece *animal : joueurCourant->getPieces()) { - // TODO + Position position = animal->getPos(); + + // Vérifier la zone de déplacement valide + int casesDisponibles = 0; + + const int taille = plateau.getTaille(); + bool skip = false; + for (int i = 0; i < taille && !skip; ++i) { + for (int j = 0; j < taille && !skip; ++j) { + if (plateau.getPiece(i, j) == nullptr) { + if (plateau.deplacementValideCoor(position.first, position.second, i, + j)) { + ++casesDisponibles; + } + if (casesDisponibles >= 8) { + ++nbAnimaux; + skip = true; + } + } + } + } } - return 3 /* nbAnimaux */; + return nbAnimaux; }