Code bon mais programme qui ne démare pas !!
freakhopes
Messages postés
39
Statut
Membre
-
Freak - Hopes -
Freak - Hopes -
Bonjour,
je viens de finir un petit programme : Un jeu de Sokoban (certaines personne reconnaîtrons le TP du site du zéro), seulement le programme ne démarre pas je m'explique :
1) La fenêtre s'ouvre on a plusieur choix : 1 - jouer
2 - éditeur de niveau
Cliquer - voir les options
Seulement si je veut jouer ou éditer un niveau le programme se ferme complétement en remontant le code j'ai deux hypothèse : soit le fichier ou j'ai enregistrer les données pour la carte ne passe pas (pourtant il passe avec la correction) soit c'est ma fonction charger_niveau qui n'est pas bonne, voici donc le code de cette fonction :
Merci pour votre aide, cordialement Baptiste.
je viens de finir un petit programme : Un jeu de Sokoban (certaines personne reconnaîtrons le TP du site du zéro), seulement le programme ne démarre pas je m'explique :
1) La fenêtre s'ouvre on a plusieur choix : 1 - jouer
2 - éditeur de niveau
Cliquer - voir les options
Seulement si je veut jouer ou éditer un niveau le programme se ferme complétement en remontant le code j'ai deux hypothèse : soit le fichier ou j'ai enregistrer les données pour la carte ne passe pas (pourtant il passe avec la correction) soit c'est ma fonction charger_niveau qui n'est pas bonne, voici donc le code de cette fonction :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include "constantes.h"
#include "fichier.h"
int charger_niveau(int niveau[][NB_BLOCS_HAUTEUR]);
int sauvegarder_niveau(int niveau[][NB_BLOCS_HAUTEUR]);
int charger_niveau(int niveau[][NB_BLOCS_HAUTEUR])
{
FILE* fichier = NULL;
char ligne_fichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
int i = 0, j = 0;
fichier = fopen("niveaux.lvl", "r");
if(fichier == NULL)
return 0;
fgets(ligne_fichier, 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 (ligne_fichier[(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;
}
Merci pour votre aide, cordialement Baptiste.
A voir également:
- Code bon mais programme qui ne démare pas !!
- Code ascii - Guide
- Programme demarrage windows - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
3 réponses
Salut.
là je ne vois rien de mauvais.
Je te conseil dans ces cas là, soit d'utiliser le debugueur si tu as une erreur de segmentation soit de faire des impressions un peu partout dans ton code afin de savoir où il se termine. Une fois que tu aura localiser l'endroit de l'erreur, elle sera plus facile à corriger.
Il est difficile de donner un avis juste sur une fonction qui n'a aucune raison de fermer le programme sauf erreur de segmentation.
là je ne vois rien de mauvais.
Je te conseil dans ces cas là, soit d'utiliser le debugueur si tu as une erreur de segmentation soit de faire des impressions un peu partout dans ton code afin de savoir où il se termine. Une fois que tu aura localiser l'endroit de l'erreur, elle sera plus facile à corriger.
Il est difficile de donner un avis juste sur une fonction qui n'a aucune raison de fermer le programme sauf erreur de segmentation.
Après réflexion...
es tu sur de ton switch :
ligne_fichier[(i * NB_BLOCS_LARGEUR) + j]
lorsque i vaut NB_BLOCS_LARGEUR-1 et j vaut NB_BLOC_HAUTEUR-1, tu as :
ligne_fichier[(NB_BLOCS_LARGEUR-1)*NB_BLOCS_LARGEUR+NB_BLOC_HAUTEUR-1]
ce qui fait :
ligne_fichier[NB_BLOCS_LARGEUR^2-NB_BLOCS_LARGEUR+NB_BLOC_HAUTEUR-1]
Alors que tu devrais tendre vers NB_BLOCS_LARGEUR*NB_BLOC_HAUTEUR
non ?
es tu sur de ton switch :
ligne_fichier[(i * NB_BLOCS_LARGEUR) + j]
lorsque i vaut NB_BLOCS_LARGEUR-1 et j vaut NB_BLOC_HAUTEUR-1, tu as :
ligne_fichier[(NB_BLOCS_LARGEUR-1)*NB_BLOCS_LARGEUR+NB_BLOC_HAUTEUR-1]
ce qui fait :
ligne_fichier[NB_BLOCS_LARGEUR^2-NB_BLOCS_LARGEUR+NB_BLOC_HAUTEUR-1]
Alors que tu devrais tendre vers NB_BLOCS_LARGEUR*NB_BLOC_HAUTEUR
non ?