diff --git a/src/Butin/PlateauButin.cpp b/src/Butin/PlateauButin.cpp index 84fbf11..2630371 100644 --- a/src/Butin/PlateauButin.cpp +++ b/src/Butin/PlateauButin.cpp @@ -96,7 +96,7 @@ std::vector PlateauButin::cheminPieces(const int depX, const int depY, bool PlateauButin::selectionJaune() const { if (selection) { - return dynamic_cast(selection)->getPoints() == + return dynamic_cast(selection)->getPoints() == PieceButin::Jaune; } @@ -104,21 +104,33 @@ bool PlateauButin::selectionJaune() const { } bool PlateauButin::coupsPossible() const { + // Liste des cases vides + std::vector> casesVides; + + // Liste des pièces jaunes + std::vector> piecesJaunes; + 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; - } - } - } + if (plateau[i][j] == nullptr) { + // Si case vide + casesVides.push_back(std::make_pair(i, j)); + } else { + // Sinon + if (dynamic_cast(plateau[i][j])->getPoints() == + PieceButin::Jaune) { + // Si pièce jaune + piecesJaunes.push_back(std::make_pair(i, j)); + } + } + } + + for (std::pair p : piecesJaunes) { + // Parmis toutes les pièces jaunes + for (std::pair it : casesVides) { + // Si le déplacement vers une case vide peut donner des points + if (!cheminPieces(p.first, p.second, it.first, it.second).empty()) { + return true; } } }