diff --git a/includes/Dames/Dames.hpp b/includes/Dames/Dames.hpp index c0849a6..5ed4420 100644 --- a/includes/Dames/Dames.hpp +++ b/includes/Dames/Dames.hpp @@ -3,6 +3,8 @@ #include "../Jeu.hpp" #include "PlateauDames.hpp" +struct PieceDames; + class Dames : private Jeu { friend std::ostream &operator<<(std::ostream &, const Dames &); @@ -10,7 +12,27 @@ class Dames : private Jeu { PlateauDames plateau; // Joueurs - const Joueur &joueur2; + Joueur &joueur2; + + // Etape du jeu, pour savoir où on en est + enum Etape { + ChoixJ1 = 0, + ChoixJ2, + EnJeu, + Fini, + }; + + // Où l'on se trouve dans le jeu, à quelle étape nous sommes + enum Etape etape; + + // Permet de transformer une Piece en PieceDames + const PieceDames *getPiece(const int x, const int y) const; + + // Message à chaque tour du joueur + const std::string msgTonTour() const; + + // Change de joueur courant + void changerJoueurCourant(); public: Dames(Joueur &joueur1, Joueur &joueur2); // constructor diff --git a/includes/Dames/PlateauDames.hpp b/includes/Dames/PlateauDames.hpp index a8498e0..9454820 100644 --- a/includes/Dames/PlateauDames.hpp +++ b/includes/Dames/PlateauDames.hpp @@ -6,6 +6,9 @@ class PlateauDames : public Plateau { Joueur *j1, *j2; + // Vérifie que le déplacement est valide + bool deplacementValide(const int destX, const int destY) const; + public: PlateauDames(Joueur &joueur1, Joueur &joueur2); virtual ~PlateauDames(); diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index d4a4ffd..d0bef9d 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -24,11 +24,47 @@ std::ostream &operator<<(std::ostream &out, const Dames &data) { return out; } +const PieceDames *Dames::getPiece(const int x, const int y) const { + return dynamic_cast(plateau.getPiece(x, y)); +} + +const std::string Dames::msgTonTour() const { + return "Joueur " + std::to_string(joueurCourant->getNum()) + + ", c'est votre tour. "; +} + void Dames::play() { plateau.afficherPlateau(std::cout); } -void Dames::event(const int, const int) {} +void Dames::event(const int x, const int y) { + // Update position + posCurseur = plateau.trouveCoordonnees(x, y); + posCurseur = getPosition(); + if (posCurseur.first == -1) { + // Mauvaise position + return; + } + + // Texte de debug + std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" + << posCurseur.first << ", " << posCurseur.second << ")\n"; + + switch(etape){ + case ChoixJ1: { + + } + case ChoixJ2: { + + } + case EnJeu: { + const Piece *p = getPiece(posCurseur.first, posCurseur.second); + } + case Fini: { + + } + } +} const Position Dames::getPosition() const { if (posCurseur.second > plateau.getTaille() - 1) { @@ -39,11 +75,20 @@ const Position Dames::getPosition() const { return posCurseur; } +void Dames::changerJoueurCourant() { + if (joueurCourant->getNum() == joueur1.getNum()) { + joueurCourant = &joueur2; + } else { + joueurCourant = &joueur1; + } +} + // TODO: A continuer // Pas très sûre de comment procéder pour cette fonction : il faudrait vérifier // les cases en diagnonale des pièces observées mais est-ce qu'il y a besoin que // les pièces aient des attributs pour leur position (comme proposé dans Piece) // ? +// UPDATE : utiliser deplacementValide ? bool Dames::prisePossible(Joueur &joueur) const { const std::vector &pieces = joueur.getPieces(); int x = 1; diff --git a/src/Dames/PlateauDames.cpp b/src/Dames/PlateauDames.cpp index 8f6bed1..ea607b4 100644 --- a/src/Dames/PlateauDames.cpp +++ b/src/Dames/PlateauDames.cpp @@ -23,3 +23,15 @@ PlateauDames::PlateauDames(Joueur &joueur1, Joueur &joueur2) } PlateauDames::~PlateauDames() {} + + +// Peut-etre utiliser cette fonction pour prisePossible ? +bool PlateauDames::deplacementValide(const int x, const int y) const { + if (!selection) { + return false; + } + + Position posInitiale = selection->getPos(); + + +}