117 lines
2.7 KiB
C
117 lines
2.7 KiB
C
/**
|
|
* \file read.c
|
|
* Ce fichier est le programe qui lit d'autre fichier, nottament les maps.
|
|
*/
|
|
#include "../include/function.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
/**
|
|
* \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)
|
|
{
|
|
int nbr_custom = countCustomMaps("maps");
|
|
(*x) = 7;
|
|
(*y)= 5*(3+nbr_custom) +2;
|
|
char **menu = creatArea2D(*x,*y);
|
|
int i = 1;
|
|
for (i = 1;i < *y-1; ++i)
|
|
{
|
|
menu[4][i] = EMPTY;
|
|
}
|
|
|
|
int j,k ;
|
|
|
|
for (j = 5; j < *y; j+=5)
|
|
{
|
|
|
|
for (k = 1 ; k < 4; ++k)
|
|
{
|
|
menu[k][j] = EMPTY;
|
|
}
|
|
}
|
|
return menu;
|
|
}
|
|
|
|
|