diff --git a/includes/Butin/Butin.hpp b/includes/Butin/Butin.hpp index 813dd7d..9b7ada6 100644 --- a/includes/Butin/Butin.hpp +++ b/includes/Butin/Butin.hpp @@ -12,10 +12,19 @@ class Butin : private Jeu { // Joueurs Joueur &joueur2; + bool j1PremierePiece = false; + bool j2PremierePiece = false; + public: Butin(Joueur &joueur1, Joueur &joueur2); // constructor virtual ~Butin(); // destructor // Fonction d'initialisation du jeu void init() override; + + // Fonction de jeu + void play() override; + + // Fonction d'évènement + void event(const int x, const int y) override; }; diff --git a/includes/Dames/Dames.hpp b/includes/Dames/Dames.hpp index 5a5e6b7..373536d 100644 --- a/includes/Dames/Dames.hpp +++ b/includes/Dames/Dames.hpp @@ -19,6 +19,12 @@ public: // Fonction d'initialisation du jeu void init() override; + // Fonction de jeu + void play() override; + + // Fonction d'évènement + void event(const int x, const int y) 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 a620006..3188cd4 100644 --- a/includes/Jeu.hpp +++ b/includes/Jeu.hpp @@ -16,4 +16,10 @@ public: // Fonction d'initialisation d'un jeu virtual void init() = 0; + + // Fonction qui fait le jeu + virtual void play() = 0; + + // Fonction qui fait quelque-chose lors d'un clic gauche + virtual void event(const int xPos, const int yPos) = 0; }; diff --git a/includes/Plateau.hpp b/includes/Plateau.hpp index ebacd75..808ded8 100644 --- a/includes/Plateau.hpp +++ b/includes/Plateau.hpp @@ -26,4 +26,7 @@ public: // Fonction pour modifier le plateau void modifierPlateau(const int x, const int y, Piece *piece) const; + + // Prend des coordonnées écran et renvoie des coordonnées jeu + std::pair trouveCoordonnees(const int x, const int y) const; }; diff --git a/includes/Safari/Safari.hpp b/includes/Safari/Safari.hpp index 74c65f1..aae0649 100644 --- a/includes/Safari/Safari.hpp +++ b/includes/Safari/Safari.hpp @@ -25,6 +25,12 @@ public: // Fonction d'initialisation du jeu void init() override; + // Fonction de jeu + void play() override; + + // Fonction d'évènement + void event(const int x, const int y) 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 14b743d..18d3891 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -1,4 +1,5 @@ #include "../../includes/Butin/Butin.hpp" +#include "../../includes/Ecran.hpp" Butin::Butin(Joueur &j1, Joueur &j2) : Jeu(j1), plateau(PlateauButin()), joueur2{j2} { @@ -17,6 +18,26 @@ void Butin::init() { plateau.initialiserPlateau(); // Demander à J1 de retirer une pièce jaune + Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant dessus."); + if (!j1PremierePiece) { + // 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) { + // Condition du clic + return; + } +} + +void Butin::play() { + plateau.afficherPlateau(std::cout); +} + +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"; } diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index 6d21c1d..b86a4e5 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -29,6 +29,12 @@ void Dames::init() { plateau.initialiserPlateau(); } +void Dames::play() { + plateau.afficherPlateau(std::cout); +} + +void Dames::event(const int, const int) {} + // 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 c77a356..3847025 100644 --- a/src/Plateau.cpp +++ b/src/Plateau.cpp @@ -26,11 +26,6 @@ std::ostream &operator<<(std::ostream &out, const Plateau &data) { void Plateau::afficherPlateau(std::ostream &out, const bool d) const { const float tailleCellule = static_cast(Ecran::largeur()) / taille; - // Adapte la vue pour le redimensionnement - const float tailleFenetre = taille * tailleCellule; - Ecran::window.setView( - sf::View(sf::FloatRect(0, 0, tailleFenetre, Ecran::window.getSize().y))); - // Cellule sf::RectangleShape cell(sf::Vector2f(tailleCellule, tailleCellule)); for (int i = 0; i < taille; i++) { @@ -76,3 +71,11 @@ void Plateau::modifierPlateau(const int x, const int y, Piece *piece) const { throw std::invalid_argument("Coordonnées invalides"); } } + +std::pair Plateau::trouveCoordonnees(const int x, const int y) const { + const float tailleCellule = static_cast(Ecran::largeur()) / taille; + + int xPlateau = static_cast(x / tailleCellule); + int yPlateau = static_cast(y / tailleCellule); + return std::make_pair(xPlateau, yPlateau); +} diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index cf4aa88..4435aa6 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -27,6 +27,12 @@ void Safari::init() { plateau.initialiserPlateau(); } +void Safari::play() { + plateau.afficherPlateau(std::cout); +} + +void Safari::event(const int, const int) {} + void Safari::choixAnimal(const PieceSafari::Categorie animal) const { if (animal == PieceSafari::Barriere) { throw std::invalid_argument("Animal non valide"); diff --git a/src/main.cpp b/src/main.cpp index 7961ba0..1c2d2cd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,7 +36,10 @@ int main(int argc, char const *argv[]) { else if (arg.compare("butin") == 0) { Joueur j2; - Butin(j1, j2); + Butin b(j1, j2); + b.init(); + e.afficher({[&]() { b.play(); }}, + {[&](const int x, const int y) { b.event(x, y); }}); } else if (arg.compare("dames") == 0) {