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 {
if (selection) {
return dynamic_cast<PieceButin *>(selection)->getPoints() ==
return dynamic_cast<const PieceButin *>(selection)->getPoints() ==
PieceButin::Jaune;
}
@ -104,21 +104,33 @@ bool PlateauButin::selectionJaune() 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 j = 0; j < taille; ++j) {
const PieceButin *piece = dynamic_cast<const PieceButin *>(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<const PieceButin *>(plateau[i][j])->getPoints() ==
PieceButin::Jaune) {
// Si pièce jaune
piecesJaunes.push_back(std::make_pair(i, j));
}
}
}
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;
}
}
}