Utilisateur anonyme
-
9 sept. 2006 à 13:21
yohan49
Messages postés380Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention13 août 2011
-
9 sept. 2006 à 23:35
Yop!
Bon voilou, je ne suis pas fortiche dans la manipulation de fichiers ^^
J'ai un fichier qui contient des lignes de suite de nombre: 000112033011140000...en tout 144 nombres
en fait c'est un jeu qui lit mon fichier .lvl, j'ai ma fenetre qui est diviser en 144 cases (je suis avec la librairie SDL), et donc je lis mon fichier, les 144 nombres, qui rentre les un a la suite des autres dans les 144 cases avec 2 for imbriquer pour faire longeur*largeur! enfin bref lol
Le fait est que le niveau 1 et ses 144 chiffres se trouve dans la ligne 1 de mon fichier, le niveau 2 se trouve dans la ligne 2, etc etc
Comment faire pour ligne une ligne dans un fichier, jouer, puis quand mon niveau est fini, j'aimerais aller lire la ligne 2, la ligne 3, etc etc ???
en fait comment on lit un fichier ligne par ligne quoi ^^
int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]); // Prototype
int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]); // Prototype
int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]) // Le C ne devine pas qu'il s'agit d'un tableau à 2 dimensions, il faut lui donner au moins la taille de la 2nd dimension!
{
FILE* fichier = NULL;
char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0}; // On crée un tableau de char pour stocker le résultat du chargement du niveau temporaire int i 0, j 0;
fichier = fopen("niveaux/niveaux.lvl", "r"); // Ouverture du fichier en lecture seule
if (fichier == NULL)
{
return 0;
}
fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); // Le fichier contient une ligne de suite de nombres, on va donc la lire avec un fgets
// On sait que les 12 premiers caractères représentent la première ligne, les 12 suivants la secondes,...
for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
{
switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
{
// Ce sont des lettres qui sont stockéees dans le fichier, 0 est stockées comme le caractère ASCII '0', et sa valeur n'est pas 0!
// Pour analyser le fichier, il faut tester avec un case '0' et non un case 0.
// Le switch fait la conversion '0' -> 0,...et place tout dans le tableau carte(niveau dans la fonction)
case '0':
niveau[j][i] = 0;
break;
case '1':
niveau[j][i] = 1;
break;
case '2':
niveau[j][i] = 2;
break;
case '3':
niveau[j][i] = 3;
break;
case '4':
niveau[j][i] = 4;
break;
}
}
}
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 9 sept. 2006 à 13:48
Lis tout d'un coup
Rempli un buffer de 144 caractères avec ton premier level
parcour tes 144 caractères, et au lieu de tester fait directement carac - '0'
Et continue avec tes lignes suivantes
gnéééé ? j'ai rien compris, en C ca donne quoi ? un buffer c'est quoi ? carac -'0' ca sert à quoi ?
oui je suis débutant dans les fichiers et dans le C par ailleurs