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 "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;
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in a new issue