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 &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;
|
||||||
|
|
|
@ -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.);
|
||||||
|
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
Reference in a new issue