Skip to content
Snippets Groups Projects
Commit f3283b81 authored by ERKEN EFE's avatar ERKEN EFE
Browse files

:sparkles: NEW: Completed init_level() function

Filled blanks in file grid.c to add function which parses level file.
parent 02dd4baa
Branches
Tags
No related merge requests found
#include "grid.h"
#include <stdlib.h>
#include <stdio.h>
#include "grid.h"
grid *creer_grid(int row, int column)
{
grid *G = (grid *)malloc(sizeof(grid));
if (G == NULL)
{
fprintf(stderr, "Error G structure alloc failed");
exit(-1);
}
G->game_grid = (enum CaseType **)(malloc(row * (sizeof(enum CaseType *))));
if (G->game_grid == NULL)
{
fprintf(stderr, "Error game_grid row alloc failed");
exit(-1);
}
for (int i = 0; i < row; i++)
{
G->game_grid[i] = (enum CaseType *)(malloc(column * (sizeof(enum CaseType))));
if (G->game_grid[i] == NULL)
{
fprintf(stderr, "Error game_grid column alloc failed");
exit(-1);
}
}
G->row_number = row;
G->column_number = column;
return G;
}
void free_grid(grid *G)
{
for (int i = 0; i < G->row_number; i++)
{
free(G->game_grid[i]);
}
free(G->game_grid);
free(G);
}
grid *init_level(const char *file_path)
{
// 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);
grid *level = creer_grid(number_row, number_column);
int current_row = 0;
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')
{
level->game_grid[current_row][current_column] = *buffer;
void init_level(const char* file_path){
// 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);
int current_row = 0;
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'){
current_column += 1;
buffer += 1;
}
current_row += 1;
}
// fermeture du fichier
fclose(file);
current_column += 1;
buffer += 1;
}
current_row += 1;
}
// fermeture du fichier
fclose(file);
return level;
}
#ifndef GRID_HEADER
#define GRID_HEADER
enum CaseType{
WALL = '#',
BOX = '$',
PLAYER = '@',
GOAL = '.',
NONE = ' '
enum CaseType
{
WALL = '#',
BOX = '$',
PLAYER = '@',
GOAL = '.',
NONE = ' '
};
/**
* @struct Grid grid.h
* @brief Cette structure contient les informations
* @brief Cette structure contient les informations
* concernant la grille du jeu et son contenu
*/
struct Grid{
enum CaseType** game_grid; ///< Tableau contenant les entités présents dans le jeu
int column_number; ///< Nombre de colonne de game_grid
int row_number; ///< Nomber de ligne de game_grid
};
void init_level(const char* file_path);
typedef struct Grid
{
enum CaseType **game_grid; ///< Tableau contenant les entités présents dans le jeu
int column_number; ///< Nombre de colonne de game_grid
int row_number; ///< Nomber de ligne de game_grid
} grid;
grid *init_level(const char *file_path);
grid *creer_grid(int row, int column);
void free_grid(grid *G);
#endif
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment