Butin: presque terminé
This commit is contained in:
parent
f3970cf3fb
commit
d5a192d082
4 changed files with 53 additions and 23 deletions
|
@ -5,6 +5,7 @@
|
|||
|
||||
struct PieceButin : public Piece {
|
||||
friend Butin;
|
||||
friend PlateauButin;
|
||||
|
||||
enum Categorie {
|
||||
Jaune = 1,
|
||||
|
|
|
@ -13,4 +13,7 @@ public:
|
|||
|
||||
// Renvoie la liste des pièces entre la pièce sélectionné et une position
|
||||
std::vector<Piece *> cheminPieces(const int destX, const int destY) const;
|
||||
|
||||
// Vrai si la pièce sélectionnée est jaune
|
||||
bool selectionJaune() const;
|
||||
};
|
||||
|
|
|
@ -109,31 +109,49 @@ void Butin::event(const int x, const int y) {
|
|||
break;
|
||||
}
|
||||
case EnJeu: {
|
||||
if (!true) {
|
||||
// TODO: Si plus aucun coup n'est possible
|
||||
etape = Fini;
|
||||
Ecran::printMessage("Bravo !");
|
||||
Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||
// Vérifie que la pièce sélectionnée = Jaune et que la case choisie = vide
|
||||
if (plateau.selectionJaune() && p == nullptr) {
|
||||
// Récupère la liste des pièces sur le chemin
|
||||
std::vector<Piece *> chemin =
|
||||
plateau.cheminPieces(posCurseur.first, posCurseur.second);
|
||||
|
||||
// Si le chemin est valide == Si des pièces sont sur le chemin
|
||||
if (!chemin.empty()) {
|
||||
// Déplace la pièce vers l'arrivé
|
||||
plateau.moveSelection(posCurseur.first, posCurseur.second);
|
||||
|
||||
// Mange les pièces sur le chemin
|
||||
for (auto it : chemin) {
|
||||
// Récupère la pièce
|
||||
std::pair<int, int> pos = it->getPos();
|
||||
Piece *gain = plateau.getPiece(pos.first, pos.second);
|
||||
|
||||
// Retire la pièce
|
||||
plateau.modifierPlateau(pos.first, pos.second, nullptr);
|
||||
|
||||
// Ajoute le point au joueur
|
||||
joueurCourant.ajoutPiece(gain);
|
||||
}
|
||||
|
||||
// Vérification partie terminé
|
||||
// TODO: Si plus aucun coup n'est possible
|
||||
if (!true /* plateau.coupsPossible() */) {
|
||||
etape = Fini;
|
||||
Ecran::printMessage("Partie terminé ! Joueur " +
|
||||
std::to_string(joueurCourant.getNum()) +
|
||||
" a gagné !");
|
||||
} else {
|
||||
// On donne la main à l'adversaire
|
||||
changerJoueurCourant();
|
||||
Ecran::printMessage(msgTonTour());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO
|
||||
Piece *p = getPiece(posCurseur.first, posCurseur.second);
|
||||
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
||||
if (p == nullptr) {
|
||||
// TODO - Si le coup est faisable (définir dans PlateauButin ?)
|
||||
if (true) {
|
||||
std::pair<int, int> from =
|
||||
plateau.moveSelection(posCurseur.first, posCurseur.second);
|
||||
|
||||
// Coordonnées de départ : (from.first , from.second)
|
||||
// Coordonnées d'arrivée : (posCurseur.first, posCurseur.second)
|
||||
// TODO: Récupérer la/les pièce/s entre ces 2 coordonnées (définir dans
|
||||
// PlateauButin ?)
|
||||
// et ajouter les points aux joueurs
|
||||
|
||||
// On donne la main à l'adversaire
|
||||
changerJoueurCourant();
|
||||
Ecran::printMessage(msgTonTour());
|
||||
}
|
||||
// Sélectionne la pièce
|
||||
else {
|
||||
plateau.modifierSelection(posCurseur.first, posCurseur.second);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -91,3 +91,11 @@ std::vector<Piece *> PlateauButin::cheminPieces(const int destX,
|
|||
|
||||
return chemin;
|
||||
}
|
||||
|
||||
bool PlateauButin::selectionJaune() const {
|
||||
if (selection) {
|
||||
return dynamic_cast<PieceButin *>(selection)->points == PieceButin::Jaune;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Reference in a new issue