* 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;
|
||||
|
||||
// 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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<Piece *> 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<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);
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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() {}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{}
|
||||
|
|
Reference in a new issue