diff --git a/grille.c b/grille.c new file mode 100644 index 0000000..84b4bb5 --- /dev/null +++ b/grille.c @@ -0,0 +1,138 @@ +#include // à enlever après +#include +#include + +#define Y_BLOCK_SIZE 10 + + +typedef enum jeton { + VIDE = 0, + BLEU = 1, + ROUGE = 2 +} jeton; + +typedef struct colonne { + int hauteur_max; + jeton* jetons; +} colonne; + +void print_tab(jeton *tab, int n) +{ + for (int i=0; i %x (%d)\n", &tab[i], tab[i], tab[i]); + printf("\n"); +} + +void print_colonne(colonne *col) +{ + print_tab(col->jetons, col->hauteur_max); +} + +void init_zeros(jeton* ptr, int count) +{ + for (int i=0; ijetons = malloc(hauteur_max*sizeof(jeton)); + init_zeros(col->jetons, hauteur_max); + + col->hauteur_max = hauteur_max; + + return col; +} + +bool agrandir_colonne(int diff_taille, colonne *col) +{ + printf("J'appelle realloc.\n"); + jeton* jetons_nouv = realloc(col->jetons, col->hauteur_max + diff_taille); + + if (jetons_nouv == NULL) + return false; // allocation impossible, on garde col->jetons tel quel + + // on met des zéros dans la partie nouvellement attribuée + init_zeros(jetons_nouv + col->hauteur_max, diff_taille); + + + printf("vérif travail init_zeros\n"); + print_tab(jetons_nouv, col->hauteur_max + diff_taille); + + // free est appelé par realloc et les éléments sont copiés par realloc + col->hauteur_max += diff_taille; + col->jetons = jetons_nouv; + + //print_colonne(col); + + return true; + +} + +int hauteur_colonne(colonne *col) +{ + int h = 0; + while (h < col->hauteur_max + && col->jetons[h] != VIDE) + h++; + + return h; +} + +bool ajouter_jeton(jeton j, colonne *col) +{ + int hauteur = hauteur_colonne(col); + printf("%d", hauteur); + if (hauteur >= col->hauteur_max) + { + if (!agrandir_colonne(Y_BLOCK_SIZE, col)) + return false; + } + + col->jetons[hauteur] = j; + return true; +} + +void detruire_colonne(colonne *col) +{ + free(col->jetons); + free(col); +} + + +typedef struct grille { + int n_positifs; + colonne* positifs; + int n_negatifs; + colonne* negatifs; +} grille; + + +// =========================================== TEST ================================================= + + + + +int main() +{ + colonne *col = creer_colonne(Y_BLOCK_SIZE); + print_colonne(col); + + for (int i=0; i<15; i++) + { + if (ajouter_jeton((i%2==0) ? ROUGE : BLEU, col)) + printf("Jeton ajouté.\n"); + else + fprintf(stderr, "Erreur dans l'ajout d'un jeton.\n"); + } + + print_colonne(col); + + detruire_colonne(col); + + return 0; +}