ne delete plus une piece quand on la retire + change correctement les positions de la pièce

This commit is contained in:
Mylloon 2023-12-31 03:38:37 +01:00
parent 35e5c5908e
commit f3970cf3fb
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 11 additions and 4 deletions

View file

@ -72,12 +72,13 @@ void Butin::event(const int x, const int y) {
switch (etape) { switch (etape) {
// Clic du J1 // Clic du J1
case (Etape::ChoixJ1): { case (Etape::ChoixJ1): {
PieceButin *p = getPiece(posCurseur.first, posCurseur.second);
// Vérifier que la pièce est jaune // Vérifier que la pièce est jaune
if (getPiece(posCurseur.first, posCurseur.second)->points == if (p->points == PieceButin::Jaune) {
PieceButin::Jaune) {
// Retire la pièce // Retire la pièce
plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr); plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr);
delete p;
// On passe à l'étape suivante // On passe à l'étape suivante
etape = ChoixJ2; etape = ChoixJ2;
@ -96,6 +97,7 @@ void Butin::event(const int x, const int y) {
if (p && p->points == PieceButin::Jaune) { if (p && p->points == PieceButin::Jaune) {
// Retire la pièce // Retire la pièce
plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr); plateau.modifierPlateau(posCurseur.first, posCurseur.second, nullptr);
delete p;
// On passe à l'étape suivante // On passe à l'étape suivante
etape = EnJeu; etape = EnJeu;

View file

@ -95,10 +95,15 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
void Plateau::modifierPlateau(const int x, const int y, Piece *piece) const { void Plateau::modifierPlateau(const int x, const int y, Piece *piece) const {
if (x >= 0 && x < taille && y >= 0 && y < taille) { if (x >= 0 && x < taille && y >= 0 && y < taille) {
if (piece == nullptr) { if (plateau[x][y]) {
delete plateau[x][y]; plateau[x][y]->moveTo(-1, -1);
} }
plateau[x][y] = piece; plateau[x][y] = piece;
if (piece) {
piece->moveTo(x, y);
}
} else { } else {
throw std::invalid_argument("Coordonnées invalides"); throw std::invalid_argument("Coordonnées invalides");
} }