vérification endgame
This commit is contained in:
parent
6df4478498
commit
00bf91b25c
3 changed files with 43 additions and 14 deletions
|
@ -10,6 +10,10 @@ struct PlateauSafari : public Plateau {
|
|||
// Fonction pour afficher le plateau vers une sortie
|
||||
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
|
||||
bool deplacementValide(const int destX, const int destY) const;
|
||||
|
||||
|
|
|
@ -148,13 +148,8 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const {
|
|||
}
|
||||
}
|
||||
|
||||
bool PlateauSafari::deplacementValide(const int x, const int y) const {
|
||||
if (!selection) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Position posInitiale = selection->getPos();
|
||||
|
||||
bool PlateauSafari::deplacementValideCoor(const int x1, const int y1,
|
||||
const int x2, const int y2) const {
|
||||
// Vérifier qu'il n'y a pas de barrière sur le chemin
|
||||
for (PieceSafari *barriere : barrieres) {
|
||||
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
|
||||
// le segment posInitiale - (x, y)
|
||||
if (posBarriere.first >= std::min(posInitiale.first, x) &&
|
||||
posBarriere.first <= std::max(posInitiale.first, x) &&
|
||||
posBarriere.second >= std::min(posInitiale.second, y) &&
|
||||
posBarriere.second <= std::max(posInitiale.second, y)) {
|
||||
if (posBarriere.first >= std::min(x1, x2) &&
|
||||
posBarriere.first <= std::max(x1, x2) &&
|
||||
posBarriere.second >= std::min(y1, y2) &&
|
||||
posBarriere.second <= std::max(y1, y2)) {
|
||||
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 {
|
||||
|
|
|
@ -289,8 +289,28 @@ int Safari::zoneDeplacementOk() const {
|
|||
int nbAnimaux = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
Reference in a new issue