1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "constantes.h"
//#include "fichiers.h"
int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
FILE* fichier = NULL;
char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
int i = 0, j = 0;
fichier = fopen("niveaux.lvl", "r+");
// r+ inutile vu que la fonction ne fait que lire le fichier sans y écrire
if (fichier == NULL)
return 0;
int ligneActuel= 0;
fseek(fichier, 0, SEEK_SET);
// fseek inutile vu que le mode "r" a automatiquement positionné le fichier au début
do
{
fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);
for(i = 0; i < NB_BLOCS_LARGEUR; i++)
{
for(j = 0; j < NB_BLOCS_HAUTEUR; j++)
{
niveau[j][i] = ligneFichier[(i * NB_BLOCS_LARGEUR) + j] - '0';
}
}
ligneActuel = fgetc(fichier);
}while (ligneActuel != EOF);
// Hum, une lecture via fgets() suivi d'une lecture d'un car. Ca marche mais faut être sûr de son format...
fclose(fichier);
return 1;
}
int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
FILE* fichier = NULL;
int i = 0, j = 0;
fichier = fopen("editeur.lvl", "w");
if (fichier == NULL)
return 0;
for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
{
fprintf(fichier, "%d", niveau[j][i]);
/*
Pas de "\n" dans l'écriture ? Ok mais alors faut super gérer la taille demandée dans fgets() parce qu'il n'aura rien d'autre pour se caler. Et demander un octet de plus ou de moins et tout plante
Imagine par exemple que le bloc[x][y] contienne le chiffre "123" (puisque c'est de l'int). Ca écrit donc 3 caractères ('1', '2' et '3') dans ton fichier.
De l'autre coté tu demandes fgets(..., 1, fichier) parce que tu veux un bloc ben malheureusement tu récupères juste le '1' et il reste '2' et '3' qui foutent la zone...
*/
}
}
fclose(fichier);
return 1;
} |