diff --git a/includes/Dames/Dames.hpp b/includes/Dames/Dames.hpp index 5ed4420..e74c0cc 100644 --- a/includes/Dames/Dames.hpp +++ b/includes/Dames/Dames.hpp @@ -27,6 +27,7 @@ class Dames : private Jeu { // Permet de transformer une Piece en PieceDames const PieceDames *getPiece(const int x, const int y) const; + PieceDames *getPiece(Piece *) const; // Message à chaque tour du joueur const std::string msgTonTour() const; diff --git a/includes/Dames/PlateauDames.hpp b/includes/Dames/PlateauDames.hpp index 9454820..afb2c4f 100644 --- a/includes/Dames/PlateauDames.hpp +++ b/includes/Dames/PlateauDames.hpp @@ -4,12 +4,16 @@ #include "../Plateau.hpp" class PlateauDames : public Plateau { + public: + PlateauDames(Joueur &joueur1, Joueur &joueur2); + virtual ~PlateauDames(); + Joueur *j1, *j2; + // Pareil que deplacementValide mais est utilisable avec des coordonnées + bool deplacementValideCoor(const int x1, const int y1, const int x2, + const int y2) const; + // Vérifie que le déplacement est valide bool deplacementValide(const int destX, const int destY) const; - -public: - PlateauDames(Joueur &joueur1, Joueur &joueur2); - virtual ~PlateauDames(); }; diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index d9bbd82..5e06405 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -1,5 +1,6 @@ #include "../../includes/Dames/Dames.hpp" #include "../../includes/Dames/PieceDames.hpp" +#include "../../includes/Ecran.hpp" Dames::Dames(Joueur &j1, Joueur &j2) : Jeu(j1), plateau(PlateauDames(j1, j2)), joueur2(j2) { @@ -28,6 +29,10 @@ const PieceDames *Dames::getPiece(const int x, const int y) const { return dynamic_cast(plateau.getPiece(x, y)); } +PieceDames *Dames::getPiece(Piece *piece) const { + return dynamic_cast(piece); +} + const std::string Dames::msgTonTour() const { return "Joueur " + std::to_string(joueurCourant->getNum()) + ", c'est votre tour. "; @@ -57,13 +62,23 @@ void Dames::event(const int x, const int y) { } case EnJeu: { const Piece *p = getPiece(posCurseur.first, posCurseur.second); - /*if (getPiece(posCurseur.first, posCurseur.second)->getCategory() == + 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); - }*/ + } + if(prisePossible(*joueurCourant)) + Ecran::printMessage("Vous devez forcément faire une prise."); + // Vérifier que le déplacement est correct + if (plateau.deplacementValide(posCurseur.first, posCurseur.second)) { + plateau.moveSelection(posCurseur.first, posCurseur.second); + // Donne la main au joueur suivant + changerJoueurCourant(); + Ecran::printMessage(msgTonTour()); + } } case Fini: { + break; } } } @@ -102,7 +117,10 @@ bool Dames::prisePossible(Joueur &joueur) const { throw std::runtime_error("Cette pièce est.. étrange."); } if (!p->getDame()) { - // if(plateau.getPiece(pos.first-1, pos.second) == nullptr) + //A continuer + if(plateau.getPiece(pos.first-1, pos.second-1) != nullptr){ + + } } } return false; diff --git a/src/Dames/PieceDames.cpp b/src/Dames/PieceDames.cpp index e8da780..d0aa525 100644 --- a/src/Dames/PieceDames.cpp +++ b/src/Dames/PieceDames.cpp @@ -7,9 +7,9 @@ PieceDames::PieceDames(const enum Categorie cat, const int posX, const int posY) PieceDames::~PieceDames() {} -/*enum PieceDames::Categorie PieceDames::getCategory() const { +enum PieceDames::Categorie PieceDames::getCategory() const { return _category; -}*/ +} bool PieceDames::getDame() const { return dame; diff --git a/src/Dames/PlateauDames.cpp b/src/Dames/PlateauDames.cpp index c878af3..f94f8be 100644 --- a/src/Dames/PlateauDames.cpp +++ b/src/Dames/PlateauDames.cpp @@ -25,6 +25,11 @@ PlateauDames::PlateauDames(Joueur &joueur1, Joueur &joueur2) PlateauDames::~PlateauDames() {} +bool PlateauDames::deplacementValideCoor(const int x1, const int y1, + const int x2, const int y2) const { + return (x2 == x1 || y2 == y1); +} + // Peut-etre utiliser cette fonction pour prisePossible ? bool PlateauDames::deplacementValide(const int x, const int y) const { if (!selection) { @@ -33,5 +38,5 @@ bool PlateauDames::deplacementValide(const int x, const int y) const { // TODO Position posInitiale = selection->getPos(); - return false; + return deplacementValideCoor(posInitiale.first, posInitiale.second, x, y); }