continuation Dames encore

This commit is contained in:
Emma 2024-01-11 18:48:50 +01:00
parent 13f7df259e
commit fcb90e5214

View file

@ -72,12 +72,17 @@ void Dames::event(const int x, const int y) {
} }
// Vérifier que le déplacement est correct // Vérifier que le déplacement est correct
if (plateau.deplacementValide(posCurseur.first, posCurseur.second)) { 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); plateau.moveSelection(posCurseur.first, posCurseur.second);
// Donne la main au joueur suivant // Donne la main au joueur suivant
changerJoueurCourant(); changerJoueurCourant();
Ecran::printMessage(msgTonTour()); Ecran::printMessage(msgTonTour());
} }
} }
}
case Fini: { case Fini: {
break; break;
} }
@ -111,16 +116,56 @@ bool Dames::prisePossible(Joueur &joueur) const {
const std::vector<Piece *> &pieces = joueur.getPieces(); const std::vector<Piece *> &pieces = joueur.getPieces();
int x = 1; int x = 1;
int y = 1; int y = 1;
const PieceDames *pieceAPrendre;
for (uint i = 0; i < pieces.size(); i++) { for (uint i = 0; i < pieces.size(); i++) {
const PieceDames *p = dynamic_cast<const PieceDames *>(pieces[i]); const PieceDames *p = dynamic_cast<const PieceDames *>(pieces[i]);
const Position pos = p->getPos(); const Position pos = p->getPos();
if (!p) { if (!p) {
throw std::runtime_error("Cette pièce est.. étrange."); throw std::runtime_error("Cette pièce est.. étrange.");
} }
if (!p->getDame()) { // On regarde si une prise est possible pour chaque coté de la piece
// A continuer if(pos.first>1){
if (plateau.getPiece(pos.first - 1, pos.second - 1) != nullptr) { pieceAPrendre = dynamic_cast<const PieceDames *>(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<const PieceDames *>(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<const PieceDames *>(plateau.getPiece(pos.first - 1, pos.second + 1));
if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory())
return true;
}
if(pos.second>1){
pieceAPrendre = dynamic_cast<const PieceDames *>(plateau.getPiece(pos.first, pos.second -1));
if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory())
return true;
}
if(pos.second<8){
pieceAPrendre = dynamic_cast<const PieceDames *>(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<const PieceDames *>(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<const PieceDames *>(plateau.getPiece(pos.first + 1, pos.second + 1));
if (pieceAPrendre != nullptr && pieceAPrendre->getCategory()!=p->getCategory())
return true;
}
if(pos.first<8){
pieceAPrendre = dynamic_cast<const PieceDames *>(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; return false;