segfault oue

This commit is contained in:
Mylloon 2024-01-11 23:19:10 +01:00
parent 7b58d615fd
commit 49fe932bae
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -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;