diff --git a/src/Dames/Dames.cpp b/src/Dames/Dames.cpp index 27d3a50..bb57876 100644 --- a/src/Dames/Dames.cpp +++ b/src/Dames/Dames.cpp @@ -58,32 +58,33 @@ void Dames::event(const int x, const int y) { switch (etape) { case EnJeu: { - const Piece *p = getPiece(posCurseur.first, posCurseur.second); - if (getPiece(posCurseur.first, posCurseur.second)->getCategory() == - getPiece(joueurCourant->getPieces().at(0))->getCategory()) { + const PieceDames *p = getPiece(posCurseur.first, posCurseur.second); + if (p && p->getCategory() == + getPiece(joueurCourant->getPieces().at(0))->getCategory()) { // On sélectionne la pièce plateau.modifierSelection(posCurseur.first, posCurseur.second); } // Si une prise est possible, le joueur est obligé d'en faire une if (prisePossible(*joueurCourant)) { Ecran::printMessage("Vous devez forcément faire une prise."); + break; // Quand il ne peux pas faire de prise, il déplace une de ses pieces - } else { - // 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()); - } + } + // 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 + // Crash ici parce que p = nullptr donc p->getPos() provoque une segfault + 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()); } } break;