optimization!
This commit is contained in:
parent
920d25daae
commit
5d345cd183
1 changed files with 26 additions and 14 deletions
|
@ -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,25 +104,37 @@ 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
|
||||||
|
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
|
// Parmis toutes les pièces jaunes
|
||||||
for (int i2 = 0; i2 < taille; ++i2) {
|
for (std::pair<int, int> it : casesVides) {
|
||||||
for (int j2 = 0; j2 < taille; ++j2) {
|
// Si le déplacement vers une case vide peut donner des points
|
||||||
// Regarde par rapport aux cases vides
|
if (!cheminPieces(p.first, p.second, it.first, it.second).empty()) {
|
||||||
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 true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue