placement animaux
This commit is contained in:
parent
00f25cc2a3
commit
c4189fb751
8 changed files with 90 additions and 28 deletions
|
@ -13,17 +13,17 @@ class 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.
|
||||||
// Pour les dames, peut être uniquement les pieces sur le plateau.
|
// Pour les dames, peut être uniquement les pieces sur le plateau.
|
||||||
// Pour le safari, les animaux du joueur
|
// Pour le safari, les animaux du joueur
|
||||||
std::vector<const Piece *> pieces;
|
std::vector<Piece *> pieces;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Joueur(const int numeroJoueur); // constructor
|
Joueur(const int numeroJoueur); // constructor
|
||||||
virtual ~Joueur(); // destructor
|
virtual ~Joueur(); // destructor
|
||||||
|
|
||||||
// Ajoute une pièce à la liste de pièces du joueur
|
// Ajoute une pièce à la liste de pièces du joueur
|
||||||
void ajoutPiece(const Piece *piece);
|
void ajoutPiece(Piece *piece);
|
||||||
|
|
||||||
// Getter pour les pièces du joueur
|
// Getter pour les pièces du joueur
|
||||||
const std::vector<const Piece *> getPieces() const;
|
const std::vector<Piece *> getPieces() const;
|
||||||
|
|
||||||
// Getter pour le nom du joueur
|
// Getter pour le nom du joueur
|
||||||
int getNum() const;
|
int getNum() const;
|
||||||
|
|
|
@ -21,6 +21,9 @@ struct PieceSafari : public Piece {
|
||||||
// Catégorie représentée par la pièce
|
// Catégorie représentée par la pièce
|
||||||
enum Categorie getCategory() const;
|
enum Categorie getCategory() const;
|
||||||
|
|
||||||
|
// Nom de la pièce
|
||||||
|
std::string getName() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string to_string(const enum Categorie) const;
|
const std::string to_string(const enum Categorie) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,6 +19,7 @@ class Safari : private Jeu {
|
||||||
ChoixJ1 = 0,
|
ChoixJ1 = 0,
|
||||||
ChoixJ2,
|
ChoixJ2,
|
||||||
ChoixJ3,
|
ChoixJ3,
|
||||||
|
Placement,
|
||||||
EnJeu,
|
EnJeu,
|
||||||
Fini,
|
Fini,
|
||||||
};
|
};
|
||||||
|
@ -30,7 +31,7 @@ class Safari : private Jeu {
|
||||||
int barrieres;
|
int barrieres;
|
||||||
|
|
||||||
// Permet de transformer une Piece en PieceSafari
|
// Permet de transformer une Piece en PieceSafari
|
||||||
const PieceSafari *getPiece(const int x, const int y) const;
|
PieceSafari *getPiece(const int x, const int y) const;
|
||||||
|
|
||||||
// Position curseur
|
// Position curseur
|
||||||
const std::pair<const int, const int> getPosition() const override;
|
const std::pair<const int, const int> getPosition() const override;
|
||||||
|
@ -41,6 +42,12 @@ class Safari : private Jeu {
|
||||||
// Message du choix des animaux
|
// Message du choix des animaux
|
||||||
const std::string msgChoixAnimal() const;
|
const std::string msgChoixAnimal() const;
|
||||||
|
|
||||||
|
// Message pour le placement des animaux
|
||||||
|
const std::string msgPlacement() const;
|
||||||
|
|
||||||
|
// Message à chaque tour de joueur
|
||||||
|
const std::string msgTonTour() const;
|
||||||
|
|
||||||
// Auxilliaire pour le choix des pièces par le joueur
|
// Auxilliaire pour le choix des pièces par le joueur
|
||||||
void choixJoueur(const Etape prochaineEtape);
|
void choixJoueur(const Etape prochaineEtape);
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ const std::pair<const int, const int> Dames::getPosition() const {
|
||||||
// les pièces aient des attributs pour leur position (comme proposé dans Piece)
|
// les pièces aient des attributs pour leur position (comme proposé dans Piece)
|
||||||
// ?
|
// ?
|
||||||
bool Dames::prisePossible(Joueur &joueur) const {
|
bool Dames::prisePossible(Joueur &joueur) const {
|
||||||
const std::vector<const Piece *> &pieces = joueur.getPieces();
|
const std::vector<Piece *> &pieces = joueur.getPieces();
|
||||||
int x = 1;
|
int x = 1;
|
||||||
int y = 1;
|
int y = 1;
|
||||||
for (uint i = 0; i < pieces.size(); i++) {
|
for (uint i = 0; i < pieces.size(); i++) {
|
||||||
|
|
|
@ -22,11 +22,11 @@ std::ostream &operator<<(std::ostream &out, const Joueur &data) {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Joueur::ajoutPiece(const Piece *piece) {
|
void Joueur::ajoutPiece(Piece *piece) {
|
||||||
pieces.push_back(piece);
|
pieces.push_back(piece);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<const Piece *> Joueur::getPieces() const {
|
const std::vector<Piece *> Joueur::getPieces() const {
|
||||||
return pieces;
|
return pieces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,18 +6,11 @@ Piece::Piece(const std::string cat, const int posX, const int posY)
|
||||||
Piece::~Piece() {}
|
Piece::~Piece() {}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const Piece &data) {
|
std::ostream &operator<<(std::ostream &out, const Piece &data) {
|
||||||
out << '"' << data.categorie << '"';
|
out << '"' << data.categorie << '"' << ":" << data.x << "," << data.y;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Piece::moveTo(const int destX, const int destY) {
|
void Piece::moveTo(const int destX, const int destY) {
|
||||||
if (destX < 0 || destY < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: On vérifie pas si la pièce sort du plateau par rapport à la taille
|
|
||||||
// du plateau (on a pas l'info ici?)
|
|
||||||
|
|
||||||
x = destX;
|
x = destX;
|
||||||
y = destY;
|
y = destY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,3 +30,7 @@ const sf::Color PieceSafari::getScreenColor() const {
|
||||||
enum PieceSafari::Categorie PieceSafari::getCategory() const {
|
enum PieceSafari::Categorie PieceSafari::getCategory() const {
|
||||||
return _category;
|
return _category;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string PieceSafari::getName() const {
|
||||||
|
return categorie;
|
||||||
|
}
|
||||||
|
|
|
@ -14,15 +14,6 @@ Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3)
|
||||||
|
|
||||||
Safari::~Safari() {}
|
Safari::~Safari() {}
|
||||||
|
|
||||||
const PieceSafari *Safari::getPiece(const int x, const int y) const {
|
|
||||||
return dynamic_cast<const PieceSafari *>(plateau.getPiece(x, y));
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string Safari::msgChoixAnimal() const {
|
|
||||||
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
|
||||||
", choississez un animal.";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const Safari &data) {
|
std::ostream &operator<<(std::ostream &out, const Safari &data) {
|
||||||
out << "j1: " << data.joueur1 << "\nj2: " << data.joueur2;
|
out << "j1: " << data.joueur1 << "\nj2: " << data.joueur2;
|
||||||
if (data.joueur3 != nullptr) {
|
if (data.joueur3 != nullptr) {
|
||||||
|
@ -34,6 +25,28 @@ std::ostream &operator<<(std::ostream &out, const Safari &data) {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PieceSafari *Safari::getPiece(const int x, const int y) const {
|
||||||
|
return dynamic_cast<PieceSafari *>(plateau.getPiece(x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string Safari::msgChoixAnimal() const {
|
||||||
|
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||||
|
", choississez un animal.";
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string Safari::msgPlacement() const {
|
||||||
|
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||||
|
", placez votre " +
|
||||||
|
dynamic_cast<PieceSafari *>(joueurCourant->getPieces().at(0))
|
||||||
|
->getName() +
|
||||||
|
".";
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string Safari::msgTonTour() const {
|
||||||
|
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||||
|
", c'est votre tour de placer une barrière.";
|
||||||
|
}
|
||||||
|
|
||||||
void Safari::play() {
|
void Safari::play() {
|
||||||
plateau.afficherPlateau(std::cout);
|
plateau.afficherPlateau(std::cout);
|
||||||
|
|
||||||
|
@ -58,14 +71,20 @@ void Safari::play() {
|
||||||
delete p;
|
delete p;
|
||||||
|
|
||||||
// On passe à l'étape suivante
|
// On passe à l'étape suivante
|
||||||
etape = Etape::EnJeu;
|
etape = Etape::Placement;
|
||||||
|
Ecran::printMessage(msgPlacement());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Placement des animaux
|
||||||
|
if (etape <= Etape::Placement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Safari::choixJoueur(const Etape next) {
|
void Safari::choixJoueur(const Etape next) {
|
||||||
const PieceSafari *p = getPiece(posCurseur.first, posCurseur.second);
|
PieceSafari *p = getPiece(posCurseur.first, posCurseur.second);
|
||||||
// Vérifie qu'une pièce à été cliquée
|
// Vérifie qu'une pièce à été cliquée
|
||||||
if (p == nullptr) {
|
if (p == nullptr) {
|
||||||
return;
|
return;
|
||||||
|
@ -74,8 +93,14 @@ void Safari::choixJoueur(const Etape next) {
|
||||||
// Donne la pièce au joueur, il est maintenant lié à cette animal
|
// Donne la pièce au joueur, il est maintenant lié à cette animal
|
||||||
joueurCourant->ajoutPiece(p);
|
joueurCourant->ajoutPiece(p);
|
||||||
|
|
||||||
|
// Ajoute les 2 autre animaux que le joueur va devoir placer
|
||||||
|
for (int i = 0; i < 2; ++i) {
|
||||||
|
joueurCourant->ajoutPiece(new PieceSafari(p->getCategory(), -1, -1));
|
||||||
|
}
|
||||||
|
|
||||||
// Retire la pièce du plateau
|
// Retire la pièce du plateau
|
||||||
plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr);
|
plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr);
|
||||||
|
p->moveTo(-1, -1);
|
||||||
|
|
||||||
// On passe à l'étape suivante
|
// On passe à l'étape suivante
|
||||||
etape = next;
|
etape = next;
|
||||||
|
@ -97,17 +122,47 @@ void Safari::event(const int x, const int y) {
|
||||||
<< posCurseur.first << ", " << posCurseur.second << ")\n";
|
<< posCurseur.first << ", " << posCurseur.second << ")\n";
|
||||||
|
|
||||||
switch (etape) {
|
switch (etape) {
|
||||||
// Clic du J1
|
// Choix animal J1
|
||||||
case ChoixJ1: {
|
case ChoixJ1: {
|
||||||
choixJoueur(ChoixJ2);
|
choixJoueur(ChoixJ2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ChoixJ2: {
|
case ChoixJ2: {
|
||||||
|
// Choix animal J2
|
||||||
choixJoueur(ChoixJ3);
|
choixJoueur(ChoixJ3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ChoixJ3: {
|
case ChoixJ3: {
|
||||||
choixJoueur(EnJeu);
|
// Choix animal J3
|
||||||
|
choixJoueur(Placement);
|
||||||
|
Ecran::printMessage(msgPlacement());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Placement: {
|
||||||
|
const Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||||
|
// Vérifie que la case choisie est vide
|
||||||
|
if (p == nullptr) {
|
||||||
|
// Placement des animaux des joueurs, tour à tour
|
||||||
|
for (Piece *it : joueurCourant->getPieces()) {
|
||||||
|
if (it->getPos().first == -1) {
|
||||||
|
plateau.modifierPlateau(posCurseur.first, posCurseur.second, it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// On laisse la main
|
||||||
|
changerJoueurCourant();
|
||||||
|
|
||||||
|
// Détection tout les joueurs ont placés leurs animaux
|
||||||
|
int total = plateau.getPieces().size();
|
||||||
|
if ((joueur3 && total == 9) || (!joueur3 && total == 6)) {
|
||||||
|
etape = Etape::EnJeu;
|
||||||
|
Ecran::printMessage(msgTonTour());
|
||||||
|
} else {
|
||||||
|
Ecran::printMessage(msgPlacement());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EnJeu: {
|
case EnJeu: {
|
||||||
|
|
Reference in a new issue