vérification endgame

This commit is contained in:
Mylloon 2024-01-07 22:56:16 +01:00
parent 6df4478498
commit 00bf91b25c
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 43 additions and 14 deletions

View file

@ -10,6 +10,10 @@ struct PlateauSafari : public Plateau {
// Fonction pour afficher le plateau vers une sortie // Fonction pour afficher le plateau vers une sortie
void afficherPlateau(std::ostream &, const bool debug = false) const override; void afficherPlateau(std::ostream &, const bool debug = false) const override;
// Pareil que deplacementValide mais est utilisable avec des coordonnées
bool deplacementValideCoor(const int x1, const int y1, const int x2,
const int y2) const;
// Vérifie que le déplacement est valide // Vérifie que le déplacement est valide
bool deplacementValide(const int destX, const int destY) const; bool deplacementValide(const int destX, const int destY) const;

View file

@ -148,13 +148,8 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const {
} }
} }
bool PlateauSafari::deplacementValide(const int x, const int y) const { bool PlateauSafari::deplacementValideCoor(const int x1, const int y1,
if (!selection) { const int x2, const int y2) const {
return false;
}
Position posInitiale = selection->getPos();
// Vérifier qu'il n'y a pas de barrière sur le chemin // Vérifier qu'il n'y a pas de barrière sur le chemin
for (PieceSafari *barriere : barrieres) { for (PieceSafari *barriere : barrieres) {
Position pos1 = barriere->getPos(); Position pos1 = barriere->getPos();
@ -176,15 +171,25 @@ bool PlateauSafari::deplacementValide(const int x, const int y) const {
// Vérifier les conditions pour le point posBarriere sur // Vérifier les conditions pour le point posBarriere sur
// le segment posInitiale - (x, y) // le segment posInitiale - (x, y)
if (posBarriere.first >= std::min(posInitiale.first, x) && if (posBarriere.first >= std::min(x1, x2) &&
posBarriere.first <= std::max(posInitiale.first, x) && posBarriere.first <= std::max(x1, x2) &&
posBarriere.second >= std::min(posInitiale.second, y) && posBarriere.second >= std::min(y1, y2) &&
posBarriere.second <= std::max(posInitiale.second, y)) { posBarriere.second <= std::max(y1, y2)) {
return false; return false;
} }
} }
return (x == posInitiale.first || y == posInitiale.second); return (x2 == x1 || y2 == y1);
}
bool PlateauSafari::deplacementValide(const int x, const int y) const {
if (!selection) {
return false;
}
Position posInitiale = selection->getPos();
return deplacementValideCoor(posInitiale.first, posInitiale.second, x, y);
} }
Position PlateauSafari::getPlaceholderBarriere() const { Position PlateauSafari::getPlaceholderBarriere() const {

View file

@ -289,8 +289,28 @@ int Safari::zoneDeplacementOk() const {
int nbAnimaux = 0; int nbAnimaux = 0;
for (Piece *animal : joueurCourant->getPieces()) { for (Piece *animal : joueurCourant->getPieces()) {
// TODO Position position = animal->getPos();
// Vérifier la zone de déplacement valide
int casesDisponibles = 0;
const int taille = plateau.getTaille();
bool skip = false;
for (int i = 0; i < taille && !skip; ++i) {
for (int j = 0; j < taille && !skip; ++j) {
if (plateau.getPiece(i, j) == nullptr) {
if (plateau.deplacementValideCoor(position.first, position.second, i,
j)) {
++casesDisponibles;
}
if (casesDisponibles >= 8) {
++nbAnimaux;
skip = true;
}
}
}
}
} }
return 3 /* nbAnimaux */; return nbAnimaux;
} }