optimization!

This commit is contained in:
Mylloon 2023-12-31 04:21:38 +01:00
parent 920d25daae
commit 5d345cd183
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -96,7 +96,7 @@ std::vector<Piece *> PlateauButin::cheminPieces(const int depX, const int depY,
bool PlateauButin::selectionJaune() const { bool PlateauButin::selectionJaune() const {
if (selection) { if (selection) {
return dynamic_cast<PieceButin *>(selection)->getPoints() == return dynamic_cast<const PieceButin *>(selection)->getPoints() ==
PieceButin::Jaune; PieceButin::Jaune;
} }
@ -104,21 +104,33 @@ bool PlateauButin::selectionJaune() const {
} }
bool PlateauButin::coupsPossible() const { bool PlateauButin::coupsPossible() const {
// Liste des cases vides
std::vector<std::pair<int, int>> casesVides;
// Liste des pièces jaunes
std::vector<std::pair<int, int>> piecesJaunes;
for (int i = 0; i < taille; ++i) { for (int i = 0; i < taille; ++i) {
for (int j = 0; j < taille; ++j) { for (int j = 0; j < taille; ++j) {
const PieceButin *piece = dynamic_cast<const PieceButin *>(plateau[i][j]); if (plateau[i][j] == nullptr) {
if (piece && piece->getPoints() == PieceButin::Jaune) { // Si case vide
// Parmis toutes les pièces jaunes casesVides.push_back(std::make_pair(i, j));
for (int i2 = 0; i2 < taille; ++i2) { } else {
for (int j2 = 0; j2 < taille; ++j2) { // Sinon
// Regarde par rapport aux cases vides if (dynamic_cast<const PieceButin *>(plateau[i][j])->getPoints() ==
if (plateau[i2][j2] == nullptr) { PieceButin::Jaune) {
// Si le déplacement d'une pièce peut donner des points // Si pièce jaune
if (!cheminPieces(i, j, i2, j2).empty()) { piecesJaunes.push_back(std::make_pair(i, j));
return true; }
} }
} }
}
for (std::pair<int, int> p : piecesJaunes) {
// Parmis toutes les pièces jaunes
for (std::pair<int, int> 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;
} }
} }
} }