diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index 56279db..d3432c0 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -72,10 +72,15 @@ void Dames::event(const int x, const int y) { } // Vérifier que le déplacement est correct if (plateau.deplacementValide(posCurseur.first, posCurseur.second)) { + // Test si le déplacement est possible pour un pions : en diagonal en direction de l'autre joueur + if((joueurCourant==&joueur1 && posCurseur.first==p->getPos().first+1) || + (joueurCourant==&joueur2 && posCurseur.first==p->getPos().first-1) && + (posCurseur.second == p->getPos().second+1 || posCurseur.second == p->getPos().second-1)){ plateau.moveSelection(posCurseur.first, posCurseur.second); // Donne la main au joueur suivant changerJoueurCourant(); Ecran::printMessage(msgTonTour()); + } } } case Fini: { @@ -111,17 +116,57 @@ bool Dames::prisePossible(Joueur &joueur) const { const std::vector &pieces = joueur.getPieces(); int x = 1; int y = 1; + const PieceDames *pieceAPrendre; for (uint i = 0; i < pieces.size(); i++) { const PieceDames *p = dynamic_cast(pieces[i]); const Position pos = p->getPos(); if (!p) { throw std::runtime_error("Cette pièce est.. étrange."); } - if (!p->getDame()) { - // A continuer - if (plateau.getPiece(pos.first - 1, pos.second - 1) != nullptr) { - } + // On regarde si une prise est possible pour chaque coté de la piece + if(pos.first>1){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first - 1, pos.second)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; } + if(pos.first>1 && pos.second>1){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first - 1, pos.second - 1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.first>1 && pos.second<8){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first - 1, pos.second + 1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.second>1){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first, pos.second -1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.second<8){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first, pos.second + 1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.first<8 && pos.second>1){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first + 1, pos.second - 1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.first<8 && pos.second<8){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first + 1, pos.second + 1)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + if(pos.first<8){ + pieceAPrendre = dynamic_cast(plateau.getPiece(pos.first + 1, pos.second)); + if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory()) + return true; + } + // Cas où la piece est une dame... + if (!p->getDame()) { + } } return false; }