* 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:
parent
23080fc7d0
commit
b0b6a5b8b1
10 changed files with 68 additions and 35 deletions
|
@ -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;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
{}
|
{}
|
||||||
|
|
Reference in a new issue