* 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;
// 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<int, int> 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<int, int> getPosition() const override;
};

View file

@ -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<int, int> posCurseur;

View file

@ -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,9 +16,12 @@ class Joueur {
std::vector<Piece *> pieces;
public:
Joueur(); // constructor
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<Piece *> 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);

View file

@ -35,5 +35,5 @@ public:
std::pair<int, int> getPosition() const override;
// 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));
}
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<int, int> Butin::getPosition() const {
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 {
joueurCourant = j2;
}
std::cout << joueurCourant.getNom()
std::cout << "Joueur " << joueurCourant.getNum()
<< " jouera avec les pièces blanches et commencera la partie."
<< std::endl;

View file

@ -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() {}

View file

@ -2,14 +2,27 @@
#include <algorithm>
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<Piece *> Joueur::getPieces() const {
return pieces;
}
const std::string &Joueur::getNom() const {
return nom;
int Joueur::getNum() const {
return id;
}
bool Joueur::retirePiece(Piece *piece) {

View file

@ -44,7 +44,7 @@ std::pair<int, int> 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");
}

View file

@ -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
{}