Saut de ligne fichier texte

DIROP Messages postés 4 Date d'inscription mercredi 29 octobre 2014 Statut Membre Dernière intervention 29 novembre 2014 - 23 nov. 2014 à 23:48
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 26 nov. 2014 à 13:46
Bonsoir, je vous explique mon problème . Je charge et je sauvegarde dans un fichier texte seulement cela se charge que sur une ligne toute les images se rajoutent seulement sur une ligne et impossible d'en rajouter sur la ligne suivante .


En gros , lorsque j' ai du:

 
11111
111




Cela m'affiche les images de cette facon la :

11111111


Voici mon code

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");
if (fichier == NULL)
return 0;

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++)
{
switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
{
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;
}
}
}

fclose(fichier);
return 1;
}

int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
FILE* fichier = NULL;
int i = 0, j = 0;

fichier = fopen("niveaux.lvl", "r");
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]);
}
}

fclose(fichier);
return 1;
}]

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 nov. 2014 à 11:38
Bonjour.

Dans ta fonction de sauvegarde, à aucun moment tu ne sautes de lignes, tout simplement.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
DIROP Messages postés 4 Date d'inscription mercredi 29 octobre 2014 Statut Membre Dernière intervention 29 novembre 2014
24 nov. 2014 à 12:10
Je vais exprimer plus mon problème en détail :

Déjà pour mettre mes images les placer dans un fichiers texte je le fais avec ce code là :

void editeur(SDL_Surface* ecran)
{
/* SDL_Surface *mur = NULL, *caisse = NULL, *objectif = NULL, *mario = NULL;*/
SDL_Surface *herbe = NULL, *chemin = NULL, *regeneration = NULL, *arene = NULL, *dresseur = NULL;
SDL_Rect position;
SDL_Event event;

int continuer = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;
int objetActuel = HERBE, i = 0, j = 0;
int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};


herbe = SDL_LoadBMP("images/bmp/herbe.bmp");
chemin = SDL_LoadBMP("images/bmp/chemin.bmp");
regeneration = SDL_LoadBMP("images/bmp/ipcentre.bmp");
arene = SDL_LoadBMP("images/bmp/arene.bmp");
dresseur = SDL_LoadBMP("water.bmp");

if (!chargerNiveau(carte))
exit(EXIT_FAILURE);

// Boucle infinie de l'éditeur
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEBUTTONDOWN:
if(objetActuel = HERBE){
if (event.button.button == SDL_BUTTON_LEFT )
{
// On met l'objet actuellement choisi (mur, caisse...) à l'endroit du clic
carte[event.button.x / 165][event.button.y / 165] = objetActuel;
clicGaucheEnCours = 1; // On active un booléen pour retenir qu'un bouton est enfoncé
}
else if (event.button.button == SDL_BUTTON_RIGHT) // Le clic droit sert à effacer
{
carte[event.button.x /165][event.button.y /165] = VIDE;
clicDroitEnCours = 1;
}
}
break;
case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé
if(objetActuel = HERBE){
if (event.button.button == SDL_BUTTON_LEFT){
clicGaucheEnCours = 0;
}
else if (event.button.button == SDL_BUTTON_RIGHT){
clicDroitEnCours = 0;
}
}
break;
case SDL_MOUSEMOTION:
if(objetActuel = HERBE){
if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé
{
carte[event.motion.x / 165][event.motion.y / 165] = objetActuel;
}
else if (clicDroitEnCours) // Pareil pour le bouton droit de la souris
{
carte[event.motion.x / 165][event.motion.y / 165] = VIDE;
}
}
break;


case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
continuer = 0;
break;
case SDLK_s:
sauvegarderNiveau(carte);
break;
case SDLK_c:
chargerNiveau(carte);
break;
case SDLK_KP1:
objetActuel = HERBE;
break;
case SDLK_KP2:
objetActuel = CHEMIN;
break;
case SDLK_KP3:
objetActuel = REGENERATION;
break;
case SDLK_KP4:
objetActuel = ARENE;
break;
case SDLK_KP5:
objetActuel = DRESSEUR;
break;
}
break;
}

// Effacement de l'écran
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

// Placement des objets à l'écran
for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
{
if (carte[i][j] == HERBE){
position.x = i * 165;
position.y = j * 165;
SDL_BlitSurface(herbe, NULL, ecran, &position);
break;
}
if (carte[i][j] == CHEMIN){
position.x = i * 180;
position.y = j * 178;
SDL_BlitSurface(chemin, NULL, ecran, &position);
break;
}
if (carte[i][j] == REGENERATION){
position.x = i * 147;
position.y = j * 159;
SDL_BlitSurface(regeneration, NULL, ecran, &position);
break;
}
if (carte[i][j] == ARENE){
position.x = i * 157;
position.y = j * 75;
SDL_BlitSurface(arene, NULL, ecran, &position);
break;
}
if (carte[i][j] == DRESSEUR){
position.x = i * 25;
position.y = j * 25;
SDL_BlitSurface(dresseur, NULL, ecran, &position);
break;
}



}
}

// Mise à jour de l'écran
SDL_Flip(ecran);
}

SDL_FreeSurface(herbe);
SDL_FreeSurface(chemin);
SDL_FreeSurface(regeneration);
SDL_FreeSurface(arene);
SDL_FreeSurface(dresseur);
}


Pour l'instant je teste seulement avec image herbe .

Seulement lorsque j'ai ma fenetre je place mes images sur tout l'écran mais seulement les images de la première ligne apparaissent. Il faut que je fasse clique droit sur l'image qui me permet dans mon cas de supprimer l'image pour que celle de la ligne suivante apparait ...

Je remets mon code pour le chargement et la sauvegarde

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");
if (fichier == NULL)
return 0;

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++)
{
switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
{
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;
}
}
}

fclose(fichier);
return 1;
}

int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
FILE* fichier = NULL;
int i = 0, j = 0;

fichier = fopen("niveaux.lvl", "r");
if (fichier == NULL)
return 0;

for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
{
fprintf(fichier, "%d\n", niveau[j][i]);
}
}

fclose(fichier);
return 1;
}


Est ce que c'est un soucis de taille de la matrice ? Sachant qu'elle est en 12 x 12 et que mon image est trop grande ou autre ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
26 nov. 2014 à 13:46
Tout d'abord ceci me paraît suspicieux:
if(objetActuel = HERBE)


Ça devrait être "==" et non "=".
Pour ton autre souci, peux-tu poster un zip sur un serveur de ton choix (ou encore mieux: sur github), avec ton code compilable ? (et un makefile si possible).

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous