/** * \file read.c * Ce fichier est le programe qui lit d'autre fichier, nottament les maps. */ #include "../include/function.h" #include #include #include /** * \brief La fonction permet de stocker la zone de jeu en fonction de la lecture d'un fichier. * \param name_file Le nom du fichier a ouvrir. * \param tab Le tableau 2D carre du plateau de jeu a remplir. * \param N La taille de tab. * \param player Les coordonnée du joueur que le programe vas trouvé. * \param nbr_targets Le nombre de points d'interer trouver. * \return Vect La fonction renvoie le tableau des coordonnée des points d'interer. */ vect *fileToTab2D (const char *name_file, char **tab, const unsigned N, vect *player, int *nbr_targets) { vect *targets = malloc (sizeof (vect)); (*nbr_targets) = 0; FILE *file = fopen (name_file, "r"); unsigned int x = 0, y = 0; while (!feof (file)) { char current = fgetc (file); if (current == EOF) { break; } switch (current) { case '#': tab[x][y] = WALL; break; case 'C': tab[x][y] = BOX; break; case 'I': targets = realloc (targets, sizeof (vect) * (++nbr_targets[0])); targets[nbr_targets[0] - 1].x = x; targets[nbr_targets[0] - 1].y = y; tab[x][y] = TARGET; break; case 'P': player->x = x; player->y = y; tab[x][y] = PLAYER; break; case '\n': y = -1; ++x; break; default: tab[x][y] = EMPTY; break; } ++y; if (x > N || y > N) { perror ("Level out of range !"); exit (-1); } } fclose (file); return targets; } int countCustomMaps(char *name_directory) { int nbr = 0; char name_map[50] = ""; sprintf(name_map, "%s/custom_%d.txt",name_directory ,nbr); FILE *file = fopen(name_map, "r"); while (file != NULL) { nbr++; sprintf(name_map, "%s/custom_%d.txt",name_directory ,nbr); printf("%p, %d, %s\n", file, nbr, name_map); file = fopen(name_map, "r"); } return nbr; } char ** generatorMenu(char *name_directory, int *x, int *y, vect *pos_player) { pos_player->x = 4; pos_player->y = 1; int nbr_custom = countCustomMaps("maps"); (*x) = 7; (*y)= 5*(3+nbr_custom) +7; char **menu = creatArea2D(*x,*y); int i = 1; for (i = 1;i < *y-1; ++i) { menu[4][i] = EMPTY; if (i == *y-2) { menu[4][i] = BUTTON; } } int j,k ; for (j = 5; j < *y-5; j+=5) { for (k = 1 ; k < 4; ++k) { if (k == 1) { menu[k][j] = BUTTON; } else { menu[k][j] = EMPTY; } } } return menu; }