WIP: endgame
This commit is contained in:
parent
6df2a0a12a
commit
94d4cc90ac
4 changed files with 40 additions and 18 deletions
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Reference in a new issue