From 18d633b3829466d71749aa27d4dca76b86b3e460 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 20 Nov 2022 15:44:32 +0100 Subject: [PATCH] fix list removal of token --- src/joueur.c | 3 ++- src/liste.c | 32 ++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/joueur.c b/src/joueur.c index b14e9ea..efe3cc1 100644 --- a/src/joueur.c +++ b/src/joueur.c @@ -22,7 +22,8 @@ void ajoute_jeton_joueur(Joueur *joueur, Jeton *jeton) { void retire_jeton_joueur(Joueur *joueur, Jeton *jeton) { Element *tmp = joueur->liste_jeton->premier; - if (tmp->jeton == jeton) { + if (tmp->jeton->pos_i == jeton->pos_i && + tmp->jeton->pos_j == jeton->pos_j) { joueur->liste_jeton->premier = tmp->suivant; free(tmp); } else { diff --git a/src/liste.c b/src/liste.c index 3592ca7..d3deecc 100644 --- a/src/liste.c +++ b/src/liste.c @@ -24,22 +24,26 @@ void ajoute_liste(Liste *liste, Element *nouveau) { liste->premier = nouveau; } -void supprime_liste(Element *act, Jeton *data) { - if (act->suivant == NULL) { - fprintf(stderr, "Élement introuvable dans la liste ("); - affiche_jeton(stderr, data); - fprintf(stderr, ").\n"); - exit(EXIT_FAILURE); +void supprime_liste(Element *elem, Jeton *data) { + Element *precedent = elem; + Element *actuel = elem; + while (actuel) { + if (actuel->jeton->pos_i == data->pos_i && + actuel->jeton->pos_j == data->pos_j) { + precedent->suivant = actuel->suivant; + free(actuel); + + return; + } else { + precedent = actuel; + actuel = actuel->suivant; + } } - if (act->suivant->jeton == data) { - Element *tmp = act->suivant; - act->suivant = act->suivant->suivant; - - free(tmp); - } else { - supprime_liste(act->suivant, data); - } + fprintf(stderr, "Élement introuvable dans la liste ("); + affiche_jeton(stderr, data); + fprintf(stderr, ").\n"); + exit(EXIT_FAILURE); } void affiche_liste(Element *element) {