WIP: endgame

This commit is contained in:
Mylloon 2024-01-07 22:19:10 +01:00
parent 6df2a0a12a
commit 94d4cc90ac
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
4 changed files with 40 additions and 18 deletions

View file

@ -3,13 +3,7 @@
#include "../Plateau.hpp" #include "../Plateau.hpp"
#include "PieceSafari.hpp" #include "PieceSafari.hpp"
class PlateauSafari : public Plateau { struct PlateauSafari : public Plateau {
// Barrières
std::vector<PieceSafari *> barrieres;
PositionMutable placeholderBarriere;
public:
PlateauSafari(); PlateauSafari();
virtual ~PlateauSafari(); virtual ~PlateauSafari();
@ -20,15 +14,24 @@ public:
bool deplacementValide(const int destX, const int destY) const; bool deplacementValide(const int destX, const int destY) const;
// Renvoie la position du placeholder // Renvoie la position du placeholder
Position getPlaceholderBarriere(); Position getPlaceholderBarriere() const;
// Modifie la position du placeholder // Modifie la position du placeholder
void setPlaceholderBarriere(const int x, const int y); void setPlaceholderBarriere(const int x, const int y);
// Avec les positions du placeholder et les positions données // Avec les positions du placeholder et les positions données
// Vérifie que les 2 points sont à côtés // Vérifie que les 2 points sont à côtés
bool validWithPlaceholder(const int x, const int y); bool validWithPlaceholder(const int x, const int y) const;
// 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 par le joueur courant
int zoneDeplacementOk() const;
private:
// Barrières
std::vector<PieceSafari *> barrieres;
PositionMutable placeholderBarriere;
}; };

View file

@ -18,6 +18,9 @@ class Safari : private Jeu {
// et placer sa barrière // et placer sa barrière
bool deplacerAnimal, placerBarriere; bool deplacerAnimal, placerBarriere;
// Vérifie si les joueurs peuvent encore jouer
int joueursEnVie;
// Etape du jeu, pour savoir où on en est // Etape du jeu, pour savoir où on en est
enum Etape { enum Etape {
ChoixJ1 = 0, ChoixJ1 = 0,

View file

@ -187,7 +187,7 @@ bool PlateauSafari::deplacementValide(const int x, const int y) const {
return (x == posInitiale.first || y == posInitiale.second); return (x == posInitiale.first || y == posInitiale.second);
} }
Position PlateauSafari::getPlaceholderBarriere() { Position PlateauSafari::getPlaceholderBarriere() const {
return placeholderBarriere; return placeholderBarriere;
} }
@ -195,7 +195,7 @@ void PlateauSafari::setPlaceholderBarriere(const int x, const int y) {
placeholderBarriere = std::make_pair(x, y); placeholderBarriere = std::make_pair(x, y);
} }
bool PlateauSafari::validWithPlaceholder(const int x, const int y) { bool PlateauSafari::validWithPlaceholder(const int x, const int y) const {
const int diffX = std::abs(placeholderBarriere.first - x); const int diffX = std::abs(placeholderBarriere.first - x);
const int diffY = std::abs(placeholderBarriere.second - y); const int diffY = std::abs(placeholderBarriere.second - y);
@ -221,3 +221,12 @@ bool PlateauSafari::placementBarriere(const int x, const int y) {
return true; return true;
} }
// TODO
int PlateauSafari::zoneDeplacementOk() const {
// Compte le nombre de joueurs qui ont encore des
// zones valides
// Zone valide = animal possède une zone de déplacement de mini 8 cases
return false;
}

View file

@ -1,12 +1,13 @@
#include "../../includes/Safari/Safari.hpp" #include "../../includes/Safari/Safari.hpp"
#include "../../includes/Ecran.hpp" #include "../../includes/Ecran.hpp"
/* Contrairement aux autres jeux ici on donne des pointeurs et pas des
* références vu que j3 peut ne pas exister (default to nullptr)
* Je sais pas trop si c'est une bonne idée, à méditer */
Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3) Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3)
: Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3}, : Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3},
deplacerAnimal(false), placerBarriere(false), barrieres(0) { deplacerAnimal(false), placerBarriere(false), joueursEnVie(3),
barrieres(0) {
if (joueur3 == nullptr) {
--joueursEnVie;
}
Ecran::printMessage(msgChoixAnimal()); Ecran::printMessage(msgChoixAnimal());
etape = ChoixJ1; etape = ChoixJ1;
} }
@ -226,11 +227,17 @@ 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 (plateau.zoneDeplacementOk() == 0) {
--joueursEnVie;
}
if (deplacerAnimal && placerBarriere) { if (deplacerAnimal && placerBarriere) {
// TODO: Vérification partie terminée // Vérification partie terminée
// Càd 1 ou 0 animal possède une zone de déplacement d'au moins 8 cases if (joueursEnVie <= 1) {
if (false) {
etape = Fini; etape = Fini;
// TODO: Afficher le joueur gagnant (s'il y en a un)
Ecran::printMessage("Partie terminée !"); Ecran::printMessage("Partie terminée !");
} else { } else {
// Le joueur a fini son tour // Le joueur a fini son tour