Ajout du fichier grille.c
Point de départ du projet, la structure accueillant la grille infinie et les colonnes
This commit is contained in:
parent
b6469c1ca0
commit
c026faf0c9
138
grille.c
Normal file
138
grille.c
Normal file
@ -0,0 +1,138 @@
|
||||
#include <stdio.h> // à enlever après
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#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<n; i++)
|
||||
printf("%p --> %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; i<count; i++)
|
||||
{
|
||||
printf("%p = 0\n", &ptr[i]);
|
||||
ptr[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
colonne *creer_colonne(int hauteur_max)
|
||||
{
|
||||
colonne *col = malloc(sizeof(colonne));
|
||||
col->jetons = 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user