wip: déplacement

This commit is contained in:
Mylloon 2024-01-07 03:06:41 +01:00
parent b1a87bdd56
commit c175e9aa56
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 68 additions and 10 deletions

View file

@ -14,6 +14,10 @@ class Safari : private Jeu {
Joueur &joueur2; Joueur &joueur2;
Joueur *joueur3; 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 // Etape du jeu, pour savoir où on en est
enum Etape { enum Etape {
ChoixJ1 = 0, ChoixJ1 = 0,
@ -32,6 +36,7 @@ class Safari : private Jeu {
// Permet de transformer une Piece en PieceSafari // Permet de transformer une Piece en PieceSafari
PieceSafari *getPiece(const int x, const int y) const; PieceSafari *getPiece(const int x, const int y) const;
PieceSafari *getPiece(Piece *) 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;

View file

@ -28,9 +28,9 @@ void PlateauSafari::afficherPlateau(std::ostream &out, const bool d) const {
// Pièces // Pièces
sf::CircleShape rhinoceros(tailleCellule / 3, 3); sf::CircleShape rhinoceros(tailleCellule / 3, 3);
// rhinoceros.setOutlineThickness(2.); rhinoceros.setOutlineThickness(2.);
sf::CircleShape elephant(tailleCellule / 3, 6); sf::CircleShape elephant(tailleCellule / 3, 6);
// elephant.setOutlineThickness(2.); elephant.setOutlineThickness(2.);
sf::CircleShape lion(tailleCellule / 3); sf::CircleShape lion(tailleCellule / 3);
lion.setOutlineThickness(2.); lion.setOutlineThickness(2.);

View file

@ -6,7 +6,7 @@
* Je sais pas trop si c'est une bonne idée, à méditer */ * Je sais pas trop si c'est une bonne idée, à méditer */
Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3) Safari::Safari(Joueur &j1, Joueur &j2, Joueur *j3)
: Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3}, : Jeu(j1), plateau(PlateauSafari()), joueur2{j2}, joueur3{j3},
barrieres(0) { deplacerAnimal(false), placerBarriere(false), barrieres(0) {
plateau.initialiserPlateau(); plateau.initialiserPlateau();
Ecran::printMessage(msgChoixAnimal()); Ecran::printMessage(msgChoixAnimal());
etape = ChoixJ1; etape = ChoixJ1;
@ -29,6 +29,10 @@ PieceSafari *Safari::getPiece(const int x, const int y) const {
return dynamic_cast<PieceSafari *>(plateau.getPiece(x, y)); 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 { const std::string Safari::msgChoixAnimal() const {
return "Joueur " + std::to_string(joueurCourant->getNum()) + return "Joueur " + std::to_string(joueurCourant->getNum()) +
", choississez un animal."; ", choississez un animal.";
@ -37,14 +41,20 @@ const std::string Safari::msgChoixAnimal() const {
const std::string Safari::msgPlacement() const { const std::string Safari::msgPlacement() const {
return "Joueur " + std::to_string(joueurCourant->getNum()) + return "Joueur " + std::to_string(joueurCourant->getNum()) +
", placez votre " + ", placez votre " +
dynamic_cast<PieceSafari *>(joueurCourant->getPieces().at(0)) getPiece(joueurCourant->getPieces().at(0))->getName() + ".";
->getName() +
".";
} }
const std::string Safari::msgTonTour() const { const std::string Safari::msgTonTour() const {
return "Joueur " + std::to_string(joueurCourant->getNum()) + std::string action;
", c'est votre tour de placer une barrière."; 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() { void Safari::play() {
@ -127,17 +137,21 @@ void Safari::event(const int x, const int y) {
choixJoueur(ChoixJ2); choixJoueur(ChoixJ2);
break; break;
} }
case ChoixJ2: {
// Choix animal J2 // Choix animal J2
case ChoixJ2: {
choixJoueur(ChoixJ3); choixJoueur(ChoixJ3);
break; break;
} }
case ChoixJ3: {
// Choix animal J3 // Choix animal J3
case ChoixJ3: {
choixJoueur(Placement); choixJoueur(Placement);
Ecran::printMessage(msgPlacement()); Ecran::printMessage(msgPlacement());
break; break;
} }
// Placement des animaux
case Placement: { case Placement: {
const Piece *p = getPiece(posCurseur.first, posCurseur.second); const Piece *p = getPiece(posCurseur.first, posCurseur.second);
// Vérifie que la case choisie est vide // Vérifie que la case choisie est vide
@ -165,7 +179,46 @@ void Safari::event(const int x, const int y) {
break; break;
} }
case EnJeu: { 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; break;
} }
case Fini: { case Fini: {