* fix du joueur courant

* utilisation du nom, ou plutot de l'ID du joueur !
* fonction pour changer de joueur courant
* fix dans safari bizarre jsp
* maintenant on donne le numéro du joueur quand on l'initialise, la copie joueur1 = joueur2 fait juste une "copie des références" (enfin jespere)
This commit is contained in:
Mylloon 2023-12-29 16:22:28 +01:00
parent 23080fc7d0
commit b0b6a5b8b1
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
10 changed files with 68 additions and 35 deletions

View file

@ -29,10 +29,16 @@ class Butin : private Jeu {
PieceButin *getPiece(const int x, const int y) const; PieceButin *getPiece(const int x, const int y) const;
// Message quand les joueurs retirent les pièces au début du jeu // 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 // Message à chaque tour du joueur
std::string msgTonTour(const int num) const; std::string msgTonTour() const;
// Position curseur
std::pair<int, int> getPosition() const override;
// Change de joueur courant
void changerJoueurCourant();
public: public:
Butin(Joueur &joueur1, Joueur &joueur2); // constructor Butin(Joueur &joueur1, Joueur &joueur2); // constructor
@ -46,7 +52,4 @@ public:
// Fonction d'évènement // Fonction d'évènement
void event(const int x, const int y) override; void event(const int x, const int y) override;
// Position curseur
std::pair<int, int> getPosition() const override;
}; };

View file

@ -3,6 +3,7 @@
#include "Joueur.hpp" #include "Joueur.hpp"
struct Jeu { struct Jeu {
// Le joueur 1 est toujours celui qui commence
Jeu(Joueur &j1); // constructor Jeu(Joueur &j1); // constructor
virtual ~Jeu(); // destructor virtual ~Jeu(); // destructor
@ -18,7 +19,7 @@ struct Jeu {
protected: protected:
// Joueurs, au moins un joueur // Joueurs, au moins un joueur
Joueur &joueur1; Joueur &joueur1;
Joueur &joueurCourant; Joueur joueurCourant;
// Position du dernier clic du curseur sur l'écran // Position du dernier clic du curseur sur l'écran
std::pair<int, int> posCurseur; std::pair<int, int> posCurseur;

View file

@ -6,8 +6,8 @@
class Joueur { class Joueur {
friend std::ostream &operator<<(std::ostream &, const Joueur &); friend std::ostream &operator<<(std::ostream &, const Joueur &);
// Nom du joueur (Je sais pas si c'est utile ?) // Numéro du joueur
std::string nom; int id;
// Pièces du joueur // Pièces du joueur
// Pour le butin, tout simplement les pièces que le joueur gagne. // Pour le butin, tout simplement les pièces que le joueur gagne.
@ -16,8 +16,11 @@ class Joueur {
std::vector<Piece *> pieces; std::vector<Piece *> pieces;
public: public:
Joueur(); // constructor Joueur(const int numeroJoueur); // constructor
virtual ~Joueur(); // destructor 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 // Ajoute une pièce à la liste de pièces du joueur
void ajoutPiece(Piece *piece); void ajoutPiece(Piece *piece);
@ -26,7 +29,7 @@ public:
const std::vector<Piece *> getPieces() const; const std::vector<Piece *> getPieces() const;
// Getter pour le nom du joueur // 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 // Fonction qui supprime une pièce de la liste de pièces du joueur
bool retirePiece(Piece *piece); bool retirePiece(Piece *piece);

View file

@ -35,5 +35,5 @@ public:
std::pair<int, int> getPosition() const override; std::pair<int, int> getPosition() const override;
// Fonction d'initialisation du jeu // Fonction d'initialisation du jeu
void choixAnimal(const PieceSafari::Categorie animal) const; void choixAnimal(const PieceSafari::Categorie animal);
}; };

View file

@ -19,8 +19,8 @@ PieceButin *Butin::getPiece(const int x, const int y) const {
return dynamic_cast<PieceButin *>(plateau.getPiece(x, y)); return dynamic_cast<PieceButin *>(plateau.getPiece(x, y));
} }
std::string Butin::msgPieceJaune(const int num, const bool erreur) const { std::string Butin::msgPieceJaune(const bool erreur) const {
std::string res = "Joueur " + std::to_string(num) + std::string res = "Joueur " + std::to_string(joueurCourant.getNum()) +
", retirez une piece jaune en cliquant dessus."; ", retirez une piece jaune en cliquant dessus.";
if (erreur) { if (erreur) {
@ -30,17 +30,16 @@ std::string Butin::msgPieceJaune(const int num, const bool erreur) const {
return res; return res;
} }
std::string Butin::msgTonTour(const int num) const { std::string Butin::msgTonTour() const {
// TODO: peut-être c'est mieux si on récupère le num directement depuis return "Joueur " + std::to_string(joueurCourant.getNum()) +
// joueurCourant ? ", c'est votre tour.";
return "Joueur " + std::to_string(num) + ", c'est votre tour.";
} }
void Butin::init() { void Butin::init() {
plateau.initialiserPlateau(); plateau.initialiserPlateau();
// Demander à J1 de retirer une pièce jaune // Demander à J1 de retirer une pièce jaune
Ecran::printMessage(msgPieceJaune(1)); Ecran::printMessage(msgPieceJaune());
etape = ChoixJ1; etape = ChoixJ1;
posCurseur = std::make_pair(-1, -1); posCurseur = std::make_pair(-1, -1);
} }
@ -82,9 +81,10 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante // On passe à l'étape suivante
etape = ChoixJ2; etape = ChoixJ2;
Ecran::printMessage(msgPieceJaune(2)); changerJoueurCourant();
Ecran::printMessage(msgPieceJaune());
} else { } else {
Ecran::printMessage(msgPieceJaune(1, true)); Ecran::printMessage(msgPieceJaune(true));
} }
break; break;
} }
@ -99,9 +99,10 @@ void Butin::event(const int x, const int y) {
// On passe à l'étape suivante // On passe à l'étape suivante
etape = EnJeu; etape = EnJeu;
Ecran::printMessage(msgTonTour(1)); changerJoueurCourant();
Ecran::printMessage(msgTonTour());
} else { } else {
Ecran::printMessage(msgPieceJaune(2, true)); Ecran::printMessage(msgPieceJaune(true));
} }
break; 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 // TODO: Récupérer la/les pièce/s entre ces 2 coordonnées (définir dans
// PlateauButin ?) // PlateauButin ?)
// et ajouter les points aux joueurs // et ajouter les points aux joueurs
// On donne la main à l'adversaire
changerJoueurCourant();
Ecran::printMessage(msgTonTour());
} }
} }
@ -145,3 +150,11 @@ std::pair<int, int> Butin::getPosition() const {
return posCurseur; return posCurseur;
} }
void Butin::changerJoueurCourant() {
if (joueurCourant.getNum() == joueur1.getNum()) {
joueurCourant = joueur2;
} else {
joueurCourant = joueur1;
}
}

View file

@ -10,7 +10,7 @@ Dames::Dames(Joueur &j1, Joueur &j2)
} else { } else {
joueurCourant = j2; joueurCourant = j2;
} }
std::cout << joueurCourant.getNom() std::cout << "Joueur " << joueurCourant.getNum()
<< " jouera avec les pièces blanches et commencera la partie." << " jouera avec les pièces blanches et commencera la partie."
<< std::endl; << std::endl;

View file

@ -1,5 +1,5 @@
#include "../includes/Jeu.hpp" #include "../includes/Jeu.hpp"
Jeu::Jeu(Joueur &j1) : joueur1(j1), joueurCourant(j1) {} Jeu::Jeu(Joueur &j1) : joueur1(j1), joueurCourant(Joueur(j1)) {}
Jeu::~Jeu() {} Jeu::~Jeu() {}

View file

@ -2,14 +2,27 @@
#include <algorithm> #include <algorithm>
Joueur::Joueur() { Joueur::Joueur(const int num) : id(num) {
std::cout << "joueur\n"; std::cout << "Joueur " << num << std::endl;
} }
Joueur::~Joueur() {} 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) { std::ostream &operator<<(std::ostream &out, const Joueur &data) {
out << "nom: " << data.nom << "\npieces: "; out << "Joueur " << data.id << "\npieces: ";
if (data.pieces.empty()) { if (data.pieces.empty()) {
out << "[]"; out << "[]";
@ -32,8 +45,8 @@ const std::vector<Piece *> Joueur::getPieces() const {
return pieces; return pieces;
} }
const std::string &Joueur::getNom() const { int Joueur::getNum() const {
return nom; return id;
} }
bool Joueur::retirePiece(Piece *piece) { bool Joueur::retirePiece(Piece *piece) {

View file

@ -44,7 +44,7 @@ std::pair<int, int> Safari::getPosition() const {
return posCurseur; return posCurseur;
} }
void Safari::choixAnimal(const PieceSafari::Categorie animal) const { void Safari::choixAnimal(const PieceSafari::Categorie animal) {
if (animal == PieceSafari::Barriere) { if (animal == PieceSafari::Barriere) {
throw std::invalid_argument("Animal non valide"); throw std::invalid_argument("Animal non valide");
} }

View file

@ -24,7 +24,7 @@ int main(int argc, char const *argv[]) {
// Interface cli // Interface cli
if (argc >= 2) { if (argc >= 2) {
Joueur j1; Joueur j1(1);
std::string arg = argv[1]; std::string arg = argv[1];
if (arg.compare("help") == 0) { if (arg.compare("help") == 0) {
@ -34,7 +34,7 @@ int main(int argc, char const *argv[]) {
} }
else if (arg.compare("butin") == 0) { else if (arg.compare("butin") == 0) {
Joueur j2; Joueur j2(2);
Butin b(j1, j2); Butin b(j1, j2);
b.init(); b.init();
@ -43,13 +43,13 @@ int main(int argc, char const *argv[]) {
} }
else if (arg.compare("dames") == 0) { else if (arg.compare("dames") == 0) {
Joueur j2; Joueur j2(2);
Dames(j1, j2); Dames(j1, j2);
} }
else if (arg.compare("safari") == 0) { else if (arg.compare("safari") == 0) {
Joueur j2; Joueur j2(2);
Joueur *j3 = nullptr; Joueur *j3 = nullptr;
// TODO: demander à l'utilisateur un 3e joueur // TODO: demander à l'utilisateur un 3e joueur
{} {}