affichage nom gagnant
This commit is contained in:
parent
f298f9c8b8
commit
576d5968c7
4 changed files with 62 additions and 45 deletions
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "../Joueur.hpp"
|
||||
#include "../Plateau.hpp"
|
||||
#include "PieceSafari.hpp"
|
||||
|
||||
|
@ -30,6 +31,9 @@ struct PlateauSafari : public Plateau {
|
|||
// Place la barrière, renvoie si on a réussi
|
||||
bool placementBarriere(const int x, const int y);
|
||||
|
||||
// Renvoie le nombre d'animaux jouable pour un joueur donnné
|
||||
int zoneDeplacementOk(const Joueur *joueur) const;
|
||||
|
||||
private:
|
||||
// Barrières
|
||||
std::vector<PieceSafari *> barrieres;
|
||||
|
|
|
@ -59,9 +59,6 @@ class Safari : private Jeu {
|
|||
// Auxilliaire pour le choix des pièces par le joueur
|
||||
void choixJoueur(const Etape prochaineEtape);
|
||||
|
||||
// Renvoie le nombre d'animaux jouable par le joueur courant
|
||||
int zoneDeplacementOk() const;
|
||||
|
||||
public:
|
||||
Safari(Joueur &joueur1, Joueur &joueur2,
|
||||
Joueur *joueur3 = nullptr); // constructor
|
||||
|
|
|
@ -251,3 +251,41 @@ bool PlateauSafari::placementBarriere(const int x, const int y) {
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
int PlateauSafari::zoneDeplacementOk(const Joueur *joueur) const {
|
||||
// Compte le nombre d'animaux qui ont encore des zones valides
|
||||
// Zone valide = animal possède une zone de déplacement de mini 8 cases
|
||||
|
||||
// Nombre d'animaux dans une zone libre valide
|
||||
int nbAnimaux = 0;
|
||||
|
||||
for (const Piece *animal : joueur->getPieces()) {
|
||||
Position position = animal->getPos();
|
||||
|
||||
// Nombre de cases sur lesquels l'animal peut se rendre
|
||||
int casesDisponibles = 0;
|
||||
|
||||
bool cherchesCasesDispo = true;
|
||||
for (int i = 0; i < taille && cherchesCasesDispo; ++i) {
|
||||
for (int j = 0; j < taille && cherchesCasesDispo; ++j) {
|
||||
// Regarde les cases vide uniquement
|
||||
if (getPiece(i, j) != nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Case dispo si on peut se déplacer dessus
|
||||
if (deplacementValideCoor(position.first, position.second, i, j)) {
|
||||
++casesDisponibles;
|
||||
}
|
||||
|
||||
// Si 8 cases sont dispo on peut arrêter la recherche pour cette animal
|
||||
if (casesDisponibles >= 8) {
|
||||
++nbAnimaux;
|
||||
cherchesCasesDispo = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nbAnimaux;
|
||||
}
|
||||
|
|
|
@ -229,7 +229,7 @@ void Safari::event(const int x, const int y) {
|
|||
|
||||
// Vérifie si le joueur pourra encore jouer
|
||||
// Càd au moins 1 animal possède une zone de déplacement d'au moins 8 cases
|
||||
if (zoneDeplacementOk() == 0) {
|
||||
if (plateau.zoneDeplacementOk(joueurCourant) == 0) {
|
||||
--joueursEnVie;
|
||||
}
|
||||
|
||||
|
@ -238,7 +238,25 @@ void Safari::event(const int x, const int y) {
|
|||
if (joueursEnVie <= 1) {
|
||||
etape = Fini;
|
||||
// TODO: Afficher le joueur gagnant (s'il y en a un)
|
||||
Ecran::printMessage("Partie terminée !");
|
||||
std::string gagnant;
|
||||
if (joueursEnVie == 0) {
|
||||
gagnant = "Aucun gagnant.";
|
||||
} else {
|
||||
if (plateau.zoneDeplacementOk(&joueur1) > 0) {
|
||||
gagnant = "Joueur 1 (" +
|
||||
getPiece(joueur1.getPieces().at(0))->getName() +
|
||||
") à gagner";
|
||||
} else if (plateau.zoneDeplacementOk(&joueur2) > 0) {
|
||||
gagnant = "Joueur 2 (" +
|
||||
getPiece(joueur2.getPieces().at(0))->getName() +
|
||||
") à gagner";
|
||||
} else {
|
||||
gagnant = "Joueur 3 (" +
|
||||
getPiece(joueur3->getPieces().at(0))->getName() +
|
||||
") à gagner";
|
||||
}
|
||||
}
|
||||
Ecran::printMessage("Partie terminée ! " + gagnant);
|
||||
} else {
|
||||
// Le joueur a fini son tour
|
||||
// Réinitialise les variables
|
||||
|
@ -280,43 +298,3 @@ void Safari::changerJoueurCourant() {
|
|||
joueurCourant = &joueur1;
|
||||
}
|
||||
}
|
||||
|
||||
int Safari::zoneDeplacementOk() const {
|
||||
// Compte le nombre d'animaux qui ont encore des zones valides
|
||||
// Zone valide = animal possède une zone de déplacement de mini 8 cases
|
||||
|
||||
// Nombre d'animaux dans une zone libre valide
|
||||
int nbAnimaux = 0;
|
||||
|
||||
for (const Piece *animal : joueurCourant->getPieces()) {
|
||||
Position position = animal->getPos();
|
||||
|
||||
// Nombre de cases sur lesquels l'animal peut se rendre
|
||||
int casesDisponibles = 0;
|
||||
|
||||
bool cherchesCasesDispo = true;
|
||||
const int taille = plateau.getTaille();
|
||||
for (int i = 0; i < taille && cherchesCasesDispo; ++i) {
|
||||
for (int j = 0; j < taille && cherchesCasesDispo; ++j) {
|
||||
// Regarde les cases vide uniquement
|
||||
if (plateau.getPiece(i, j) != nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Case dispo si on peut se déplacer dessus
|
||||
if (plateau.deplacementValideCoor(position.first, position.second, i,
|
||||
j)) {
|
||||
++casesDisponibles;
|
||||
}
|
||||
|
||||
// Si 8 cases sont dispo on peut arrêter la recherche pour cette animal
|
||||
if (casesDisponibles >= 8) {
|
||||
++nbAnimaux;
|
||||
cherchesCasesDispo = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nbAnimaux;
|
||||
}
|
||||
|
|
Reference in a new issue