Saut de ligne fichier texte

Messages postés
6
Date d'inscription
mercredi 29 octobre 2014
Statut
Membre
Dernière intervention
29 novembre 2014
- - Dernière réponse : cptpingu
Messages postés
3799
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
14 novembre 2019
- 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;
}]
Afficher la suite 

3 réponses

Messages postés
3799
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
14 novembre 2019
90
0
Merci
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
Commenter la réponse de cptpingu
Messages postés
6
Date d'inscription
mercredi 29 octobre 2014
Statut
Membre
Dernière intervention
29 novembre 2014
0
Merci
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 ?
Commenter la réponse de DIROP
Messages postés
3799
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
14 novembre 2019
90
0
Merci
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
Commenter la réponse de cptpingu