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 "PieceSafari.hpp"
class PlateauSafari : public Plateau {
// Barrières
std::vector<PieceSafari *> barrieres;
PositionMutable placeholderBarriere;
public:
struct PlateauSafari : public Plateau {
PlateauSafari();
virtual ~PlateauSafari();
@ -20,15 +14,24 @@ public:
bool deplacementValide(const int destX, const int destY) const;
// Renvoie la position du placeholder
Position getPlaceholderBarriere();
Position getPlaceholderBarriere() const;
// Modifie la position du placeholder
void setPlaceholderBarriere(const int x, const int y);
// Avec les positions du placeholder et les positions données
// 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
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
bool deplacerAnimal, placerBarriere;
// Vérifie si les joueurs peuvent encore jouer
int joueursEnVie;
// Etape du jeu, pour savoir où on en est
enum Etape {
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);
}
Position PlateauSafari::getPlaceholderBarriere() {
Position PlateauSafari::getPlaceholderBarriere() const {
return placeholderBarriere;
}
@ -195,7 +195,7 @@ void PlateauSafari::setPlaceholderBarriere(const int x, const int 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 diffY = std::abs(placeholderBarriere.second - y);
@ -221,3 +221,12 @@ bool PlateauSafari::placementBarriere(const int x, const int y) {
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/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)
: 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());
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) {
// TODO: Vérification partie terminée
// Càd 1 ou 0 animal possède une zone de déplacement d'au moins 8 cases
if (false) {
// Vérification partie terminée
if (joueursEnVie <= 1) {
etape = Fini;
// TODO: Afficher le joueur gagnant (s'il y en a un)
Ecran::printMessage("Partie terminée !");
} else {
// Le joueur a fini son tour