#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); } struct 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); struct Grid * grid = new_grid(number_column, number_row); 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'){ change_cell_grid(grid, current_column, current_row, buffer); current_column += 1; buffer += 1; } 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_grid(int x, int y) { 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); struct Player * player = malloc(sizeof(struct Player *)); player->x = 0; player->y = 0; new_strut_grid->position = player; 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++) 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; } } printf("\n"); } } 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); free( grid->position); free (grid); }