opt + fix a memory leak
This commit is contained in:
parent
2d408a24f7
commit
01447538e9
4 changed files with 59 additions and 79 deletions
|
@ -5,7 +5,7 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
/* Une case est soit vide, soit occupé par un des joueurs, noir ou blanc */
|
||||
enum CASE_PLAT { VIDE, BLANC = -2, NOIR = 2 };
|
||||
enum CASE_PLAT { VIDE, BLANC, NOIR };
|
||||
|
||||
/* Propriété globale du jeu */
|
||||
enum PLATEAU_DATA { LONGEUR = 8, LARGEUR = 8 };
|
||||
|
@ -18,21 +18,18 @@ struct jeton {
|
|||
};
|
||||
typedef struct jeton Jeton;
|
||||
|
||||
/* Créer un nouveau jeton */
|
||||
Jeton *nouveau_jeton(void);
|
||||
|
||||
/* Ajoute un nouveau jeton */
|
||||
Jeton *ajoute_jeton(int position_i, int position_j, int couleur);
|
||||
|
||||
/* Élement de la liste */
|
||||
struct element {
|
||||
Jeton *jeton_act;
|
||||
Jeton *jeton;
|
||||
struct element *suivant;
|
||||
};
|
||||
typedef struct element Element;
|
||||
|
||||
/* Créer un nouvel élément pour la liste */
|
||||
Element *nouvel_element(void);
|
||||
Element *nouvel_element(Jeton *jeton);
|
||||
|
||||
/* Liste chaînée */
|
||||
struct list {
|
||||
|
@ -44,10 +41,10 @@ typedef struct list Liste;
|
|||
Liste *nouvelle_liste(void);
|
||||
|
||||
/* Ajoute un élément à la liste */
|
||||
void ajoute_liste(Element *element_actuel, Element *nouvel_element);
|
||||
void ajoute_liste(Liste *liste, Element *nouvel_element);
|
||||
|
||||
/* Supprime un élément de la liste */
|
||||
int supprime_liste(Element *element_actuel, Jeton *jeton);
|
||||
void supprime_liste(Element *element_actuel, Jeton *jeton);
|
||||
|
||||
/* Libère la liste en mémoire */
|
||||
void free_liste(Liste *liste);
|
||||
|
@ -65,14 +62,11 @@ typedef struct joueur Joueur;
|
|||
/* Créer un nouveau joueur */
|
||||
Joueur *nouveau_joueur(int pion);
|
||||
|
||||
/* Ajoute un nouveau joueur */
|
||||
Joueur *ajoute_joueur(int pion, char *nom);
|
||||
/* Ajoute un jeton d'un joueur */
|
||||
void ajoute_jeton_joueur(Joueur *joueur, Jeton *jeton);
|
||||
|
||||
/* Ajoute un jeton d'un joueur à la liste */
|
||||
void ajoute_jeton_liste(Joueur *joueur, Jeton *jeton);
|
||||
|
||||
/* Supprime le jeton d'un joueur de la liste */
|
||||
void supprime_jeton_liste(Joueur *joueur, Jeton *jeton);
|
||||
/* Retire le jeton d'un joueur */
|
||||
void retire_jeton_joueur(Joueur *joueur, Jeton *jeton);
|
||||
|
||||
/* Jeu contenant nos 2 joueurs et le plateau de jeu */
|
||||
struct jeu {
|
||||
|
|
26
src/jeu.c
26
src/jeu.c
|
@ -1,13 +1,5 @@
|
|||
#include "../includes/plateau.h"
|
||||
|
||||
Jeton *nouveau_jeton(void) {
|
||||
Jeton *jeton = malloc(sizeof(Jeton));
|
||||
jeton->couleur = NOIR;
|
||||
jeton->pos_i = -1;
|
||||
jeton->pos_j = -1;
|
||||
|
||||
return jeton;
|
||||
}
|
||||
Jeton *ajoute_jeton(int pos_i, int pos_j, int couleur) {
|
||||
Jeton *jeton = malloc(sizeof(Jeton));
|
||||
jeton->couleur = couleur;
|
||||
|
@ -19,17 +11,7 @@ Jeton *ajoute_jeton(int pos_i, int pos_j, int couleur) {
|
|||
|
||||
Joueur *nouveau_joueur(int pion) {
|
||||
Joueur *joueur = malloc(sizeof(Joueur));
|
||||
joueur->nom = pion > 0 ? "NOIR" : "BLANC";
|
||||
joueur->couleur = pion;
|
||||
joueur->liste_jeton = nouvelle_liste();
|
||||
joueur->nb_jeton = 0;
|
||||
|
||||
return joueur;
|
||||
}
|
||||
|
||||
Joueur *ajoute_joueur(int pion, char *n) {
|
||||
Joueur *joueur = malloc(sizeof(Joueur));
|
||||
joueur->nom = n;
|
||||
joueur->nom = pion == NOIR ? "NOIR" : "BLANC";
|
||||
joueur->couleur = pion;
|
||||
joueur->liste_jeton = nouvelle_liste();
|
||||
joueur->nb_jeton = 0;
|
||||
|
@ -53,5 +35,11 @@ void free_jeu(Jeu *jeu) {
|
|||
free_liste(jeu->j2->liste_jeton);
|
||||
free(jeu->j2);
|
||||
|
||||
for (int i = 0; i < LONGEUR; ++i) {
|
||||
for (int j = 0; j < LARGEUR; ++j) {
|
||||
free(jeu->plateau[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
free(jeu);
|
||||
}
|
||||
|
|
76
src/liste.c
76
src/liste.c
|
@ -1,7 +1,9 @@
|
|||
#include "../includes/struct.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
Element *nouvel_element(void) {
|
||||
Element *nouvel_element(Jeton *jeton) {
|
||||
Element *element = malloc(sizeof(Element));
|
||||
element->jeton = jeton;
|
||||
element->suivant = NULL;
|
||||
return element;
|
||||
}
|
||||
|
@ -13,49 +15,49 @@ Liste *nouvelle_liste(void) {
|
|||
return liste;
|
||||
}
|
||||
|
||||
void ajoute_jeton_liste(Joueur *joueur, Jeton *jeton) {
|
||||
joueur->nb_jeton = joueur->nb_jeton + 1;
|
||||
Element *ajout = nouvel_element();
|
||||
ajout->jeton_act = jeton;
|
||||
ajoute_liste(joueur->liste_jeton->premier, ajout);
|
||||
void ajoute_jeton_joueur(Joueur *joueur, Jeton *jeton) {
|
||||
// Change le jeton
|
||||
jeton->couleur = joueur->couleur;
|
||||
|
||||
// Ajoute le jeton à la liste des jetons du joueur
|
||||
Element *element = nouvel_element(jeton);
|
||||
ajoute_liste(joueur->liste_jeton, element);
|
||||
joueur->nb_jeton++;
|
||||
}
|
||||
|
||||
void ajoute_liste(Element *actuel, Element *nouveau) {
|
||||
if (actuel == NULL) {
|
||||
actuel = nouveau;
|
||||
} else if (actuel->jeton_act->pos_i != nouveau->jeton_act->pos_i ||
|
||||
actuel->jeton_act->pos_j != nouveau->jeton_act->pos_j) {
|
||||
ajoute_liste(actuel->suivant, nouveau);
|
||||
void ajoute_liste(Liste *liste, Element *nouveau) {
|
||||
Element *ptr = liste->premier;
|
||||
while (ptr) {
|
||||
ptr = ptr->suivant;
|
||||
}
|
||||
ptr = nouveau;
|
||||
}
|
||||
|
||||
void supprime_jeton_liste(Joueur *joueur, Jeton *jeton) {
|
||||
if (joueur->liste_jeton->premier->jeton_act != jeton) {
|
||||
if (supprime_liste(joueur->liste_jeton->premier, jeton)) {
|
||||
joueur->nb_jeton = joueur->nb_jeton - 1;
|
||||
}
|
||||
|
||||
} else {
|
||||
joueur->liste_jeton->premier = joueur->liste_jeton->premier->suivant;
|
||||
joueur->nb_jeton = joueur->nb_jeton - 1;
|
||||
}
|
||||
}
|
||||
|
||||
int supprime_liste(Element *act, Jeton *data) {
|
||||
if (act->suivant == NULL) {
|
||||
fprintf(stderr, "N'est pas dans la liste, pas possible de supprimer\n");
|
||||
|
||||
return 0;
|
||||
} else if (act->suivant->jeton_act == data) {
|
||||
printf("C'est (%d;%d)\n", act->suivant->jeton_act->pos_i,
|
||||
act->suivant->jeton_act->pos_j);
|
||||
Element *tmp = act->suivant;
|
||||
act->suivant = act->suivant->suivant;
|
||||
void retire_jeton_joueur(Joueur *joueur, Jeton *jeton) {
|
||||
Element *tmp = joueur->liste_jeton->premier;
|
||||
if (tmp->jeton == jeton) {
|
||||
joueur->liste_jeton->premier = tmp->suivant;
|
||||
free(tmp);
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
return supprime_liste(act->suivant, data);
|
||||
supprime_liste(tmp, jeton);
|
||||
}
|
||||
joueur->nb_jeton--;
|
||||
jeton->couleur = VIDE;
|
||||
}
|
||||
|
||||
void supprime_liste(Element *act, Jeton *data) {
|
||||
if (act->suivant == NULL) {
|
||||
fprintf(stderr, "Élement introuvable dans la liste\n");
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
} else if (act->suivant->jeton == data) {
|
||||
Element *tmp = act->suivant;
|
||||
printf("=> (%d;%d)\n", tmp->jeton->pos_i, tmp->jeton->pos_j);
|
||||
act->suivant = tmp->suivant->suivant;
|
||||
|
||||
free(tmp);
|
||||
} else {
|
||||
supprime_liste(act->suivant, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,20 +8,16 @@ void remplissage_debut(Jeu *jeu) {
|
|||
}
|
||||
|
||||
// D4
|
||||
jeu->plateau[3][3]->couleur = BLANC;
|
||||
ajoute_jeton_liste(jeu->j2, jeu->plateau[3][3]);
|
||||
ajoute_jeton_joueur(jeu->j2, jeu->plateau[3][3]);
|
||||
|
||||
// E4
|
||||
jeu->plateau[3][4]->couleur = NOIR;
|
||||
ajoute_jeton_liste(jeu->j1, jeu->plateau[3][4]);
|
||||
ajoute_jeton_joueur(jeu->j1, jeu->plateau[3][4]);
|
||||
|
||||
// E5
|
||||
jeu->plateau[4][4]->couleur = BLANC;
|
||||
ajoute_jeton_liste(jeu->j2, jeu->plateau[4][4]);
|
||||
ajoute_jeton_joueur(jeu->j2, jeu->plateau[4][4]);
|
||||
|
||||
// D5
|
||||
jeu->plateau[4][3]->couleur = NOIR;
|
||||
ajoute_jeton_liste(jeu->j1, jeu->plateau[4][3]);
|
||||
ajoute_jeton_joueur(jeu->j1, jeu->plateau[4][3]);
|
||||
}
|
||||
|
||||
char recupere_case(Jeton *plateau[LONGEUR][LARGEUR], int case_i, int case_j) {
|
||||
|
|
Reference in a new issue