From 920d25daae6be28c6294389a25469a9d1cc695be Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 04:10:41 +0100 Subject: [PATCH] =?UTF-8?q?d=C3=A9tection=20fin=20du=20jeu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/Butin/PlateauButin.hpp | 9 +++++++-- src/Butin/PlateauButin.cpp | 32 ++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/includes/Butin/PlateauButin.hpp b/includes/Butin/PlateauButin.hpp index 78dd1cc..ea7348e 100644 --- a/includes/Butin/PlateauButin.hpp +++ b/includes/Butin/PlateauButin.hpp @@ -3,8 +3,8 @@ #include "../Plateau.hpp" #include -class PlateauButin : public Plateau { -public: +struct PlateauButin : public Plateau { + PlateauButin(); virtual ~PlateauButin(); @@ -19,4 +19,9 @@ public: // Vrai si un coup est possible bool coupsPossible() const; + +private: + // Renvoie la liste des pièces entre deux position + std::vector cheminPieces(const int depX, const int depY, + const int destX, const int destY) const; }; diff --git a/src/Butin/PlateauButin.cpp b/src/Butin/PlateauButin.cpp index ff6e36d..84fbf11 100644 --- a/src/Butin/PlateauButin.cpp +++ b/src/Butin/PlateauButin.cpp @@ -48,11 +48,13 @@ void PlateauButin::initialiserPlateau() { std::vector PlateauButin::cheminPieces(const int destX, const int destY) const { - // Position départ std::pair posSelection = selection->getPos(); - const int depX = posSelection.first; - const int depY = posSelection.second; + return cheminPieces(posSelection.first, posSelection.second, destX, destY); +} +std::vector PlateauButin::cheminPieces(const int depX, const int depY, + const int destX, + const int destY) const { // Distances const int deltaX = destX - depX; const int deltaY = destY - depY; @@ -102,7 +104,25 @@ bool PlateauButin::selectionJaune() const { } bool PlateauButin::coupsPossible() const { - // TODO: Vérifier si en partant des pièces jaunes il n'y aurait pas des coups - // possibles - return true; + for (int i = 0; i < taille; ++i) { + for (int j = 0; j < taille; ++j) { + const PieceButin *piece = dynamic_cast(plateau[i][j]); + if (piece && piece->getPoints() == PieceButin::Jaune) { + // Parmis toutes les pièces jaunes + for (int i2 = 0; i2 < taille; ++i2) { + for (int j2 = 0; j2 < taille; ++j2) { + // Regarde par rapport aux cases vides + if (plateau[i2][j2] == nullptr) { + // Si le déplacement d'une pièce peut donner des points + if (!cheminPieces(i, j, i2, j2).empty()) { + return true; + } + } + } + } + } + } + } + + return false; }