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 *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;

View file

@ -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.);

View file

@ -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;
}
// Choix animal J2
case ChoixJ2: {
// Choix animal J2
choixJoueur(ChoixJ3);
break;
}
// Choix animal J3
case ChoixJ3: {
// Choix animal J3
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: {