Code bon mais programme qui ne démare pas !!

freakhopes Messages postés 39 Statut Membre -  
 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 :

#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:

3 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 ?
0
Freak - Hopes
 
Hum... Hum.... bien vu ^^' je vais y réfléchir voir =) merci en tout cas de ta réponse rapide :D
0