wip: déplacement
This commit is contained in:
parent
b1a87bdd56
commit
c175e9aa56
3 changed files with 68 additions and 10 deletions
|
@ -14,6 +14,10 @@ class Safari : private Jeu {
|
|||
Joueur &joueur2;
|
||||
Joueur *joueur3;
|
||||
|
||||
// Savoir si le joueur courant à déjà déplacer son animal
|
||||
// et placer sa barrière
|
||||
bool deplacerAnimal, placerBarriere;
|
||||
|
||||
// Etape du jeu, pour savoir où on en est
|
||||
enum Etape {
|
||||
ChoixJ1 = 0,
|
||||
|
@ -32,6 +36,7 @@ class Safari : private Jeu {
|
|||
|
||||
// Permet de transformer une Piece en PieceSafari
|
||||
PieceSafari *getPiece(const int x, const int y) const;
|
||||
PieceSafari *getPiece(Piece *) const;
|
||||
|
||||
// Position curseur
|
||||
const std::pair<const int, const int> getPosition() const override;
|
||||
|
|
|
@ -28,9 +28,9 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const {
|
|||
|
||||
// Pièces
|
||||
sf::CircleShape rhinoceros(tailleCellule / 3, 3);
|
||||
// rhinoceros.setOutlineThickness(2.);
|
||||
rhinoceros.setOutlineThickness(2.);
|
||||
sf::CircleShape elephant(tailleCellule / 3, 6);
|
||||
// elephant.setOutlineThickness(2.);
|
||||
elephant.setOutlineThickness(2.);
|
||||
sf::CircleShape lion(tailleCellule / 3);
|
||||
lion.setOutlineThickness(2.);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* Je sais pas trop si c'est une bonne idée, à méditer */
|
||||
Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3)
|
||||
: Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3},
|
||||
barrieres(0) {
|
||||
deplacerAnimal(false), placerBarriere(false), barrieres(0) {
|
||||
plateau.initialiserPlateau();
|
||||
Ecran::printMessage(msgChoixAnimal());
|
||||
etape = ChoixJ1;
|
||||
|
@ -29,6 +29,10 @@ PieceSafari *Safari::getPiece(const int x, const int y) const {
|
|||
return dynamic_cast<PieceSafari *>(plateau.getPiece(x, y));
|
||||
}
|
||||
|
||||
PieceSafari *Safari::getPiece(Piece *piece) const {
|
||||
return dynamic_cast<PieceSafari *>(piece);
|
||||
}
|
||||
|
||||
const std::string Safari::msgChoixAnimal() const {
|
||||
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||
", choississez un animal.";
|
||||
|
@ -37,14 +41,20 @@ const std::string Safari::msgChoixAnimal() const {
|
|||
const std::string Safari::msgPlacement() const {
|
||||
return "Joueur " + std::to_string(joueurCourant->getNum()) +
|
||||
", placez votre " +
|
||||
dynamic_cast<PieceSafari *>(joueurCourant->getPieces().at(0))
|
||||
->getName() +
|
||||
".";
|
||||
getPiece(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.";
|
||||
std::string action;
|
||||
if (!deplacerAnimal) {
|
||||
action =
|
||||
"déplacez un " + getPiece(joueurCourant->getPieces().at(0))->getName();
|
||||
} else {
|
||||
action = "placez une barrière";
|
||||
}
|
||||
|
||||
return "Joueur " + std::to_string(joueurCourant->getNum()) + ", " + action +
|
||||
".";
|
||||
}
|
||||
|
||||
void Safari::play() {
|
||||
|
@ -127,17 +137,21 @@ void Safari::event(const int x, const int y) {
|
|||
choixJoueur(ChoixJ2);
|
||||
break;
|
||||
}
|
||||
case ChoixJ2: {
|
||||
|
||||
// Choix animal J2
|
||||
case ChoixJ2: {
|
||||
choixJoueur(ChoixJ3);
|
||||
break;
|
||||
}
|
||||
case ChoixJ3: {
|
||||
|
||||
// Choix animal J3
|
||||
case ChoixJ3: {
|
||||
choixJoueur(Placement);
|
||||
Ecran::printMessage(msgPlacement());
|
||||
break;
|
||||
}
|
||||
|
||||
// Placement des animaux
|
||||
case Placement: {
|
||||
const Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||
// Vérifie que la case choisie est vide
|
||||
|
@ -165,7 +179,46 @@ void Safari::event(const int x, const int y) {
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
case EnJeu: {
|
||||
const Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||
|
||||
// Si la case cliquée est vide
|
||||
if (p == nullptr) {
|
||||
bool justChanged = false;
|
||||
|
||||
// Déplacer un animal
|
||||
if (!deplacerAnimal) {
|
||||
// TODO: Vérifier que le déplacement est correct
|
||||
plateau.moveSelection(posCurseur.first, posCurseur.second);
|
||||
justChanged = true;
|
||||
deplacerAnimal = true;
|
||||
Ecran::printMessage(msgTonTour());
|
||||
}
|
||||
|
||||
// Poser une barrière
|
||||
if (!placerBarriere && !justChanged) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
if (deplacerAnimal && placerBarriere) {
|
||||
// Le joueur a fini son tour
|
||||
// Réinitialise les variables
|
||||
deplacerAnimal = false;
|
||||
placerBarriere = false;
|
||||
|
||||
// Donne la main au joueur suivant
|
||||
changerJoueurCourant();
|
||||
Ecran::printMessage(msgTonTour());
|
||||
}
|
||||
} else {
|
||||
// Vérifie que la pièce est à nous
|
||||
if (getPiece(posCurseur.first, posCurseur.second)->getCategory() ==
|
||||
getPiece(joueurCourant->getPieces().at(0))->getCategory()) {
|
||||
// On sélectionne la pièce
|
||||
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Fini: {
|
||||
|
|
Reference in a new issue