diff --git a/includes/Butin/Butin.hpp b/includes/Butin/Butin.hpp index a8c21f3..cb433a9 100644 --- a/includes/Butin/Butin.hpp +++ b/includes/Butin/Butin.hpp @@ -22,10 +22,18 @@ class Butin : private Jeu { Fini, }; + // Où l'on se trouve dans le jeu, à quelle étape nous sommes enum Etape etape; + // Permet de transformer une Piece en PieceButin PieceButin *getPiece(const int x, const int y) const; + // Message quand les joueurs retirent les pièces au début du jeu + std::string msgPieceJaune(const int num, const bool erreur = false) const; + + // Message à chaque tour du joueur + std::string msgTonTour(const int num) const; + public: Butin(Joueur &joueur1, Joueur &joueur2); // constructor virtual ~Butin(); // destructor diff --git a/includes/Butin/PieceButin.hpp b/includes/Butin/PieceButin.hpp index 81bbfb5..37c955a 100644 --- a/includes/Butin/PieceButin.hpp +++ b/includes/Butin/PieceButin.hpp @@ -15,6 +15,9 @@ struct PieceButin : public Piece { PieceButin(const enum Categorie); virtual ~PieceButin(); + // Couleur sur l'écran + sf::Color getScreenColor() const override; + private: int points; diff --git a/includes/Dames/PieceDames.hpp b/includes/Dames/PieceDames.hpp index 758f870..7f09da3 100644 --- a/includes/Dames/PieceDames.hpp +++ b/includes/Dames/PieceDames.hpp @@ -11,6 +11,9 @@ struct PieceDames : public Piece { PieceDames(const enum Categorie); virtual ~PieceDames(); + // Couleur sur l'écran + sf::Color getScreenColor() const override; + // Getter pour la piece (dame ou non) bool getDame() const; diff --git a/includes/Piece.hpp b/includes/Piece.hpp index ce87caf..dbfa389 100644 --- a/includes/Piece.hpp +++ b/includes/Piece.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include class Piece { @@ -20,4 +21,7 @@ public: // Fonction de déplacement bool moveTo(const int destX, const int destY); + + // Renvoie la couleur de la pièce pour l'affichage + virtual sf::Color getScreenColor() const = 0; }; diff --git a/includes/Safari/PieceSafari.hpp b/includes/Safari/PieceSafari.hpp index c073957..4329053 100644 --- a/includes/Safari/PieceSafari.hpp +++ b/includes/Safari/PieceSafari.hpp @@ -13,6 +13,9 @@ struct PieceSafari : public Piece { PieceSafari(const enum Categorie); virtual ~PieceSafari(); + // Couleur sur l'écran + sf::Color getScreenColor() const override; + private: std::string to_string(const enum Categorie) const; }; diff --git a/src/Butin/Butin.cpp b/src/Butin/Butin.cpp index 5da3d14..f4d1b24 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -19,11 +19,28 @@ PieceButin *Butin::getPiece(const int x, const int y) const { return dynamic_cast(plateau.getPiece(x, y)); } +std::string Butin::msgPieceJaune(const int num, const bool erreur) const { + std::string res = "Joueur " + std::to_string(num) + + ", retirez une piece jaune en cliquant dessus."; + + if (erreur) { + res = "Mauvaise piece. " + res; + } + + return res; +} + +std::string Butin::msgTonTour(const int num) const { + // TODO: peut-être c'est mieux si on récupère le num directement depuis + // joueurCourant ? + return "Joueur " + std::to_string(num) + ", c'est votre tour."; +} + void Butin::init() { plateau.initialiserPlateau(); // Demander à J1 de retirer une pièce jaune - Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant dessus."); + Ecran::printMessage(msgPieceJaune(1)); etape = ChoixJ1; posCurseur = std::make_pair(-1, -1); } @@ -31,13 +48,11 @@ void Butin::init() { void Butin::play() { plateau.afficherPlateau(std::cout); if (etape <= Etape::ChoixJ1) { - // Condition du clic return; } // Demander à J2 de retirer une pièce jaune if (etape <= Etape::ChoixJ2) { - // Condition du clic return; } } @@ -51,9 +66,13 @@ void Butin::event(const int x, const int y) { return; } + // Texte de debug + std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" + << posCurseur.first << ", " << posCurseur.second << ")\n"; + switch (etape) { + // Clic du J1 case (Etape::ChoixJ1): { - // Clic du J1 // Vérifier que la pièce est jaune if (getPiece(posCurseur.first, posCurseur.second)->points == PieceButin::Jaune) { @@ -63,16 +82,15 @@ void Butin::event(const int x, const int y) { // On passe à l'étape suivante etape = ChoixJ2; - Ecran::printMessage( - "Joueur 2, retirez une piece jaune en cliquant dessus."); + Ecran::printMessage(msgPieceJaune(2)); } else { - Ecran::printMessage("Joueur 1, retirez une piece jaune en cliquant " - "dessus. Mauvaise Pièce."); + Ecran::printMessage(msgPieceJaune(1, true)); } break; } + + // Clic du J2 case ChoixJ2: { - // Clic du J2 // Vérifier que la pièce est jaune if (getPiece(posCurseur.first, posCurseur.second)->points == PieceButin::Jaune) { @@ -81,6 +99,9 @@ void Butin::event(const int x, const int y) { // On passe à l'étape suivante etape = EnJeu; + Ecran::printMessage(msgTonTour(1)); + } else { + Ecran::printMessage(msgPieceJaune(2, true)); } break; } @@ -94,14 +115,10 @@ void Butin::event(const int x, const int y) { break; } } - - // Texte de debug - std::cout << "Clic souris @ (" << x << ", " << y << ") aka (" - << posCurseur.first << ", " << posCurseur.second << ")\n"; } std::pair Butin::getPosition() const { - if (posCurseur.first > plateau.getTaille() - 1) { + if (posCurseur.second > plateau.getTaille() - 1) { std::cerr << "Position inconnu du plateau.\n"; return std::make_pair(-1, -1); } diff --git a/src/Butin/PieceButin.cpp b/src/Butin/PieceButin.cpp index 98f2f39..116ba44 100644 --- a/src/Butin/PieceButin.cpp +++ b/src/Butin/PieceButin.cpp @@ -22,3 +22,18 @@ std::string PieceButin::to_string(const enum Categorie cat) const { exit(EXIT_FAILURE); } } + +sf::Color PieceButin::getScreenColor() const { + switch (points) { + case Jaune: + return sf::Color::Yellow; + case Rouge: + return sf::Color::Red; + case Noire: + return sf::Color::Black; + + default: + // Ne devrait pas arriver + return sf::Color::White; + } +} diff --git a/src/Dames/PieceDames.cpp b/src/Dames/PieceDames.cpp index 1b84825..a7ad87e 100644 --- a/src/Dames/PieceDames.cpp +++ b/src/Dames/PieceDames.cpp @@ -27,3 +27,8 @@ std::string PieceDames::to_string(const enum Categorie cat) const { exit(EXIT_FAILURE); } } + +sf::Color PieceDames::getScreenColor() const { + // TODO + return sf::Color::White; +} diff --git a/src/Plateau.cpp b/src/Plateau.cpp index 5b38113..8472892 100644 --- a/src/Plateau.cpp +++ b/src/Plateau.cpp @@ -26,15 +26,23 @@ 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; + const float decalagePiece = tailleCellule / 6; + // Cellule sf::RectangleShape cell(sf::Vector2f(tailleCellule, tailleCellule)); + + // Pièce + sf::CircleShape piece(tailleCellule / 3); + piece.setOutlineThickness(2.); + for (int i = 0; i < taille; i++) { for (int j = 0; j < taille; j++) { const float x = i * tailleCellule; const float y = j * tailleCellule; - // Position de la cellule + // Position de la cellule et de la pièce cell.setPosition(x, y); + piece.setPosition(x + decalagePiece, y + decalagePiece); if (d) { out << "(" << x << ", " << y; } @@ -42,11 +50,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const { // Alternation des couleurs if ((i + j) % 2 == 0) { cell.setFillColor(sf::Color::White); + piece.setOutlineColor(sf::Color::Black); if (d) { out << ", B), "; } } else { cell.setFillColor(sf::Color::Black); + piece.setOutlineColor(sf::Color::White); if (d) { out << ", N), "; } @@ -54,6 +64,13 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const { // Dessine la cellule Ecran::window.draw(cell); + + // Dessine la pièce + Piece *p = plateau[i][j]; + if (p != nullptr) { + piece.setFillColor(p->getScreenColor()); + Ecran::window.draw(piece); + } } if (d) { out << "\n"; diff --git a/src/Safari/PieceSafari.cpp b/src/Safari/PieceSafari.cpp index 07240fc..7a488cf 100644 --- a/src/Safari/PieceSafari.cpp +++ b/src/Safari/PieceSafari.cpp @@ -22,3 +22,8 @@ std::string PieceSafari::to_string(const enum Categorie cat) const { exit(EXIT_FAILURE); } } + +sf::Color PieceSafari::getScreenColor() const { + // TODO + return sf::Color::White; +}