diff --git a/includes/Butin/Butin.hpp b/includes/Butin/Butin.hpp index cb433a9..e7bbb13 100644 --- a/includes/Butin/Butin.hpp +++ b/includes/Butin/Butin.hpp @@ -29,10 +29,16 @@ class Butin : private Jeu { 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; + std::string msgPieceJaune(const bool erreur = false) const; // Message à chaque tour du joueur - std::string msgTonTour(const int num) const; + std::string msgTonTour() const; + + // Position curseur + std::pair getPosition() const override; + + // Change de joueur courant + void changerJoueurCourant(); public: Butin(Joueur &joueur1, Joueur &joueur2); // constructor @@ -46,7 +52,4 @@ 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/Jeu.hpp b/includes/Jeu.hpp index 6c3837e..9c9a8fe 100644 --- a/includes/Jeu.hpp +++ b/includes/Jeu.hpp @@ -3,6 +3,7 @@ #include "Joueur.hpp" struct Jeu { + // Le joueur 1 est toujours celui qui commence Jeu(Joueur &j1); // constructor virtual ~Jeu(); // destructor @@ -18,7 +19,7 @@ struct Jeu { protected: // Joueurs, au moins un joueur Joueur &joueur1; - Joueur &joueurCourant; + Joueur joueurCourant; // Position du dernier clic du curseur sur l'écran std::pair posCurseur; diff --git a/includes/Joueur.hpp b/includes/Joueur.hpp index 42981c7..9cd7622 100644 --- a/includes/Joueur.hpp +++ b/includes/Joueur.hpp @@ -6,8 +6,8 @@ class Joueur { friend std::ostream &operator<<(std::ostream &, const Joueur &); - // Nom du joueur (Je sais pas si c'est utile ?) - std::string nom; + // Numéro du joueur + int id; // Pièces du joueur // Pour le butin, tout simplement les pièces que le joueur gagne. @@ -16,8 +16,11 @@ class Joueur { std::vector pieces; public: - Joueur(); // constructor - virtual ~Joueur(); // destructor + Joueur(const int numeroJoueur); // constructor + virtual ~Joueur(); // destructor + + Joueur(const Joueur &); // copy constructor + const Joueur &operator=(const Joueur &); // copy assignement // Ajoute une pièce à la liste de pièces du joueur void ajoutPiece(Piece *piece); @@ -26,7 +29,7 @@ public: const std::vector getPieces() const; // Getter pour le nom du joueur - const std::string &getNom() const; + int getNum() const; // Fonction qui supprime une pièce de la liste de pièces du joueur bool retirePiece(Piece *piece); diff --git a/includes/Safari/Safari.hpp b/includes/Safari/Safari.hpp index edb6e48..89da045 100644 --- a/includes/Safari/Safari.hpp +++ b/includes/Safari/Safari.hpp @@ -35,5 +35,5 @@ public: std::pair getPosition() const override; // Fonction d'initialisation du jeu - void choixAnimal(const PieceSafari::Categorie animal) const; + void choixAnimal(const PieceSafari::Categorie animal); }; diff --git a/src/Butin/Butin.cpp b/src/Butin/Butin.cpp index 1140296..3170d59 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -19,8 +19,8 @@ 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) + +std::string Butin::msgPieceJaune(const bool erreur) const { + std::string res = "Joueur " + std::to_string(joueurCourant.getNum()) + ", retirez une piece jaune en cliquant dessus."; if (erreur) { @@ -30,17 +30,16 @@ std::string Butin::msgPieceJaune(const int num, const bool erreur) const { 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."; +std::string Butin::msgTonTour() const { + return "Joueur " + std::to_string(joueurCourant.getNum()) + + ", c'est votre tour."; } void Butin::init() { plateau.initialiserPlateau(); // Demander à J1 de retirer une pièce jaune - Ecran::printMessage(msgPieceJaune(1)); + Ecran::printMessage(msgPieceJaune()); etape = ChoixJ1; posCurseur = std::make_pair(-1, -1); } @@ -82,9 +81,10 @@ void Butin::event(const int x, const int y) { // On passe à l'étape suivante etape = ChoixJ2; - Ecran::printMessage(msgPieceJaune(2)); + changerJoueurCourant(); + Ecran::printMessage(msgPieceJaune()); } else { - Ecran::printMessage(msgPieceJaune(1, true)); + Ecran::printMessage(msgPieceJaune(true)); } break; } @@ -99,9 +99,10 @@ void Butin::event(const int x, const int y) { // On passe à l'étape suivante etape = EnJeu; - Ecran::printMessage(msgTonTour(1)); + changerJoueurCourant(); + Ecran::printMessage(msgTonTour()); } else { - Ecran::printMessage(msgPieceJaune(2, true)); + Ecran::printMessage(msgPieceJaune(true)); } break; } @@ -126,6 +127,10 @@ void Butin::event(const int x, const int y) { // TODO: Récupérer la/les pièce/s entre ces 2 coordonnées (définir dans // PlateauButin ?) // et ajouter les points aux joueurs + + // On donne la main à l'adversaire + changerJoueurCourant(); + Ecran::printMessage(msgTonTour()); } } @@ -145,3 +150,11 @@ std::pair Butin::getPosition() const { return posCurseur; } + +void Butin::changerJoueurCourant() { + if (joueurCourant.getNum() == joueur1.getNum()) { + joueurCourant = joueur2; + } else { + joueurCourant = joueur1; + } +} diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index 9854309..f39df7c 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -10,7 +10,7 @@ Dames::Dames(Joueur &j1, Joueur &j2) } else { joueurCourant = j2; } - std::cout << joueurCourant.getNom() + std::cout << "Joueur " << joueurCourant.getNum() << " jouera avec les pièces blanches et commencera la partie." << std::endl; diff --git a/src/Jeu.cpp b/src/Jeu.cpp index 85ae585..18b81ba 100644 --- a/src/Jeu.cpp +++ b/src/Jeu.cpp @@ -1,5 +1,5 @@ #include "../includes/Jeu.hpp" -Jeu::Jeu(Joueur &j1) : joueur1(j1), joueurCourant(j1) {} +Jeu::Jeu(Joueur &j1) : joueur1(j1), joueurCourant(Joueur(j1)) {} Jeu::~Jeu() {} diff --git a/src/Joueur.cpp b/src/Joueur.cpp index 580af2a..5a64803 100644 --- a/src/Joueur.cpp +++ b/src/Joueur.cpp @@ -2,14 +2,27 @@ #include -Joueur::Joueur() { - std::cout << "joueur\n"; +Joueur::Joueur(const int num) : id(num) { + std::cout << "Joueur " << num << std::endl; } Joueur::~Joueur() {} +Joueur::Joueur(const Joueur &src) : id(src.id), pieces(src.pieces) {} + +const Joueur &Joueur::operator=(const Joueur &src) { + if (this == &src) { + return *this; + } + + id = src.id; + pieces = src.pieces; + + return *this; +} + std::ostream &operator<<(std::ostream &out, const Joueur &data) { - out << "nom: " << data.nom << "\npieces: "; + out << "Joueur " << data.id << "\npieces: "; if (data.pieces.empty()) { out << "[]"; @@ -32,8 +45,8 @@ const std::vector Joueur::getPieces() const { return pieces; } -const std::string &Joueur::getNom() const { - return nom; +int Joueur::getNum() const { + return id; } bool Joueur::retirePiece(Piece *piece) { diff --git a/src/Safari/Safari.cpp b/src/Safari/Safari.cpp index 24d9b46..edb2a9b 100644 --- a/src/Safari/Safari.cpp +++ b/src/Safari/Safari.cpp @@ -44,7 +44,7 @@ std::pair Safari::getPosition() const { return posCurseur; } -void Safari::choixAnimal(const PieceSafari::Categorie animal) const { +void Safari::choixAnimal(const PieceSafari::Categorie animal) { if (animal == PieceSafari::Barriere) { throw std::invalid_argument("Animal non valide"); } diff --git a/src/main.cpp b/src/main.cpp index 1c2d2cd..27e1ccf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,7 +24,7 @@ int main(int argc, char const *argv[]) { // Interface cli if (argc >= 2) { - Joueur j1; + Joueur j1(1); std::string arg = argv[1]; if (arg.compare("help") == 0) { @@ -34,7 +34,7 @@ int main(int argc, char const *argv[]) { } else if (arg.compare("butin") == 0) { - Joueur j2; + Joueur j2(2); Butin b(j1, j2); b.init(); @@ -43,13 +43,13 @@ int main(int argc, char const *argv[]) { } else if (arg.compare("dames") == 0) { - Joueur j2; + Joueur j2(2); Dames(j1, j2); } else if (arg.compare("safari") == 0) { - Joueur j2; + Joueur j2(2); Joueur *j3 = nullptr; // TODO: demander à l'utilisateur un 3e joueur {}