Newer
Older
#include "grid.h"
#include <stdlib.h>
#include <stdio.h>
int coordonner_vers_indice(int x, int y, struct Grid* grid)
{
return((y * grid->column_number)+ x);
}
enum CaseType* initialisation_grid(int x, int y)
{
size_t taille_grid = x * y;
enum CaseType* new_grid = (enum CaseType*) malloc(taille_grid * sizeof(enum CaseType));
for(size_t i = 0; i< taille_grid; i++)
{
new_grid[i] = NONE;
}
return new_grid;
}
struct Player* init_player()
{
struct Player * player = malloc(sizeof(struct Player *));
player->x = 0;
player->y = 0;
return player;
}
// ouverture du fichier en mode lecture
FILE* file = fopen(file_path, "r");
if(!file){
fprintf(stderr, "Error %s not found", file_path);
exit(-1);
}
char line[100] = {0};
int number_column = 0; // nombre de colonne
int number_row = 0; /// nombre de ligne
int number_goals = 0;
// on lit la première ligne du fichier
fgets(line, 100, file);
sscanf(line, "%d %d %d", &number_column, &number_row, &number_goals);
struct Grid* grid = new_grid(number_row, number_column);
grid->tabGoal = malloc(number_goals * (sizeof(struct Goal)));
int current_goal = 0;
// On lit le fichier ligne par ligne jusqu'à la fin du fichier
while(fgets(line, 100, file) != NULL){
char* buffer = line;
int current_column = 0;
while(*buffer && *buffer != '\n'){
if(buffer[0] == '@'){
grid->position->x = current_column;
grid->position->y = current_row;
}
if(buffer[0] == '.'){
grid->tabGoal[current_goal].x = current_column;
grid->tabGoal[current_goal].y = current_row;
current_goal =+1;
}
else{
change_cell_grid(grid, current_row, current_column, buffer[0]);
}
}
current_row += 1;
}
// fermeture du fichier
fclose(file);
enum CaseType* initialisation_grid(int x, int y)
{
size_t taille_grid = x * y;
enum CaseType* new_grid = (enum CaseType*) malloc(taille_grid * sizeof(enum CaseType));
for(size_t i = 0; i< taille_grid; i++)
{
new_grid[i] = NONE;
}
return new_grid;
}
struct Grid * new_strut_grid = (struct Grid *) malloc(sizeof(struct Grid *));
new_strut_grid->column_number=x;
new_strut_grid->row_number= y;
new_strut_grid->game_grid = initialisation_grid(x, y);
new_strut_grid->position = init_player();
new_strut_grid->tabGoal = NULL;
return new_strut_grid;
}
enum CaseType get_grid(struct Grid* grid, int x, int y)
{
if (0 <= x && x <grid->column_number && 0 <= y && y <grid->row_number )
{
return grid->game_grid[coordonner_vers_indice(x, y, grid)];
}
else{return -1;}
void Affichage_grid(struct Grid* grid)
{
for(int i = 0; i<grid->column_number; i++)
{
for(int j = 0 ; j < grid->row_number; j++)

Arnaud Albiez
committed
switch(get_grid(grid, i, j)){
case NONE :{
printf(" ");
break;
}
case WALL:{
printf("#");
break;
}
case PLAYER:{
printf("@");
break;
}
case GOAL:{
printf(".");
break;
}
case BOX:{
printf("$");
break;
}
}

Arnaud Albiez
committed
void change_cell_grid(struct Grid* grid, int x, int y, enum CaseType new_valeur)
{
grid->game_grid[coordonner_vers_indice(x, y, grid)] = new_valeur;
}
void free_grid(struct Grid* grid)
{
free( grid->game_grid);