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
|
#pragma once
|
||||||
|
|
||||||
|
#include "../Joueur.hpp"
|
||||||
#include "../Plateau.hpp"
|
#include "../Plateau.hpp"
|
||||||
#include "PieceSafari.hpp"
|
#include "PieceSafari.hpp"
|
||||||
|
|
||||||
|
@ -30,6 +31,9 @@ struct PlateauSafari : public Plateau {
|
||||||
// Place la barrière, renvoie si on a réussi
|
// Place la barrière, renvoie si on a réussi
|
||||||
bool placementBarriere(const int x, const int y);
|
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:
|
private:
|
||||||
// Barrières
|
// Barrières
|
||||||
std::vector<PieceSafari *> barrieres;
|
std::vector<PieceSafari *> barrieres;
|
||||||
|
|
|
@ -59,9 +59,6 @@ class Safari : private Jeu {
|
||||||
// Auxilliaire pour le choix des pièces par le joueur
|
// Auxilliaire pour le choix des pièces par le joueur
|
||||||
void choixJoueur(const Etape prochaineEtape);
|
void choixJoueur(const Etape prochaineEtape);
|
||||||
|
|
||||||
// Renvoie le nombre d'animaux jouable par le joueur courant
|
|
||||||
int zoneDeplacementOk() const;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Safari(Joueur &joueur1, Joueur &joueur2,
|
Safari(Joueur &joueur1, Joueur &joueur2,
|
||||||
Joueur *joueur3 = nullptr); // constructor
|
Joueur *joueur3 = nullptr); // constructor
|
||||||
|
|
|
@ -251,3 +251,41 @@ bool PlateauSafari::placementBarriere(const int x, const int y) {
|
||||||
|
|
||||||
return true;
|
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
|
// 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
|
// 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;
|
--joueursEnVie;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +238,25 @@ void Safari::event(const int x, const int y) {
|
||||||
if (joueursEnVie <= 1) {
|
if (joueursEnVie <= 1) {
|
||||||
etape = Fini;
|
etape = Fini;
|
||||||
// TODO: Afficher le joueur gagnant (s'il y en a un)
|
// 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 {
|
} else {
|
||||||
// Le joueur a fini son tour
|
// Le joueur a fini son tour
|
||||||
// Réinitialise les variables
|
// Réinitialise les variables
|
||||||
|
@ -280,43 +298,3 @@ void Safari::changerJoueurCourant() {
|
||||||
joueurCourant = &joueur1;
|
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