diff --git a/includes/Butin/Butin.hpp b/includes/Butin/Butin.hpp index 9b7ada6..c990bd0 100644 --- a/includes/Butin/Butin.hpp +++ b/includes/Butin/Butin.hpp @@ -12,8 +12,15 @@ class Butin : private Jeu { // Joueurs Joueur &joueur2; - bool j1PremierePiece = false; - bool j2PremierePiece = false; + // Etape du jeu, pour savoir où on en est + enum Etape { + ChoixJ1 = 0, + ChoixJ2, + EnJeu, + Fini, + }; + + enum Etape etape; public: Butin(Joueur &joueur1, Joueur &joueur2); // constructor @@ -27,4 +34,7 @@ public: // Fonction d'évènement void event(const int x, const int y) override; + + // Position curseur + std::pair getPosition() const override; }; diff --git a/includes/Dames/Dames.hpp b/includes/Dames/Dames.hpp index 373536d..85daafd 100644 --- a/includes/Dames/Dames.hpp +++ b/includes/Dames/Dames.hpp @@ -25,6 +25,9 @@ public: // Fonction d'évènement void event(const int x, const int y) override; + // Position curseur + std::pair getPosition() const override; + // Vérifie si une prise est possible pour une pièce donnée bool prisePossible(Joueur &joueur) const; }; diff --git a/includes/Jeu.hpp b/includes/Jeu.hpp index 3188cd4..decebdb 100644 --- a/includes/Jeu.hpp +++ b/includes/Jeu.hpp @@ -2,15 +2,7 @@ #include "Joueur.hpp" -class Jeu { - friend std::ostream &operator<<(std::ostream &, const Jeu &); - -protected: - // Joueurs, au moins un joueur - Joueur &joueur1; - Joueur &joueurCourant; - -public: +struct Jeu { Jeu(Joueur &j1); // constructor virtual ~Jeu(); // destructor @@ -22,4 +14,15 @@ public: // Fonction qui fait quelque-chose lors d'un clic gauche virtual void event(const int xPos, const int yPos) = 0; + +protected: + // Joueurs, au moins un joueur + Joueur &joueur1; + Joueur &joueurCourant; + + // Position du dernier clic du curseur sur l'écran + std::pair posCurseur; + + // Récupère la position du curseur + virtual std::pair getPosition() const = 0; }; diff --git a/includes/Plateau.hpp b/includes/Plateau.hpp index 808ded8..b2c7bfb 100644 --- a/includes/Plateau.hpp +++ b/includes/Plateau.hpp @@ -29,4 +29,7 @@ public: // Prend des coordonnées écran et renvoie des coordonnées jeu std::pair trouveCoordonnees(const int x, const int y) const; + + // Renvoie la taille du plateau + int getTaille() const; }; diff --git a/includes/Safari/Safari.hpp b/includes/Safari/Safari.hpp index aae0649..edb6e48 100644 --- a/includes/Safari/Safari.hpp +++ b/includes/Safari/Safari.hpp @@ -31,6 +31,9 @@ public: // Fonction d'évènement void event(const int x, const int y) override; + // Position curseur + std::pair getPosition() const override; + // Fonction d'initialisation du jeu void choixAnimal(const PieceSafari::Categorie animal) const; }; diff --git a/src/Butin/Butin.cpp b/src/Butin/Butin.cpp index 18d3891..74c4bfa 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -19,25 +19,36 @@ void Butin::init() { // Demander à J1 de retirer une pièce jaune Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant dessus."); - if (!j1PremierePiece) { + etape = ChoixJ1; + posCurseur = std::make_pair(-1, -1); +} + +void Butin::play() { + plateau.afficherPlateau(std::cout); + if (etape <= Etape::ChoixJ1) { // Condition du clic return; } // Demander à J2 de retirer une pièce jaune Ecran::printMessage("Joueur 2, retirez une piece jaune en cliquant dessus."); - if (!j2PremierePiece) { + if (etape <= Etape::ChoixJ2) { // Condition du clic return; } } -void Butin::play() { - plateau.afficherPlateau(std::cout); +void Butin::event(const int x, const int y) { + posCurseur = plateau.trouveCoordonnees(x, y); + std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" + << posCurseur.first << ", " << posCurseur.second << ")\n"; } -void Butin::event(const int x, const int y) { - auto pos = plateau.trouveCoordonnees(x, y); - std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" << pos.first - << ", " << pos.second << ")\n"; +std::pair Butin::getPosition() const { + if (posCurseur.first > plateau.getTaille() - 1) { + std::cerr << "Position inconnu du plateau.\n"; + exit(EXIT_FAILURE); + } + + return posCurseur; } diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index b86a4e5..6c1edb8 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -35,6 +35,15 @@ void Dames::play() { void Dames::event(const int, const int) {} +std::pair Dames::getPosition() const { + if (posCurseur.first > plateau.getTaille() - 1) { + std::cerr << "Position inconnu du plateau.\n"; + exit(EXIT_FAILURE); + } + + return posCurseur; +} + // 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 diff --git a/src/Plateau.cpp b/src/Plateau.cpp index 3847025..f201c7e 100644 --- a/src/Plateau.cpp +++ b/src/Plateau.cpp @@ -79,3 +79,7 @@ std::pair Plateau::trouveCoordonnees(const int x, const int y) const { int yPlateau = static_cast(y / tailleCellule); return std::make_pair(xPlateau, yPlateau); } + +int Plateau::getTaille() const { + return taille; +} diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index 4435aa6..a0c9c70 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -33,6 +33,15 @@ void Safari::play() { void Safari::event(const int, const int) {} +std::pair Safari::getPosition() const { + if (posCurseur.first > plateau.getTaille() - 1) { + std::cerr << "Position inconnu du plateau.\n"; + exit(EXIT_FAILURE); + } + + return posCurseur; +} + void Safari::choixAnimal(const PieceSafari::Categorie animal) const { if (animal == PieceSafari::Barriere) { throw std::invalid_argument("Animal non valide");