Partage
  • Partager sur Facebook
  • Partager sur Twitter

[TP SOKOBAN]

Probleme avec un tableau de structure

Sujet résolu
    30 décembre 2007 à 15:13:12

    Salut tout les zeros!!
    Je suis actuelement sur le TP de M@teo sur la SDL

    Mon probleme est que mon exe plante a un certain endroit du code(precisé plus bas) celui-ci se ferme avec aparement aucune raison(aparement :colere2: ).

    C'est aparement un probleme avec un tableau de structure (de type SDL_Rect) creé dans une autre fonctions (j'ai donc utlisé un pointeur mai il aprecie pas aparement :-° ).

    Voici le code de la fonction qui pose probleme:
    1. /*cette fonction me sert a recuperer les position des differents element de la map
    2.                    -dans map on a la position de tt les blocs
    3.                    -dans posMario la position de Mario au debut (qui me servira apres pour le deplacer)
    4.                    -et dans posOBJ les position des objectifs (ces position me serviron a faire reaparaitre
    5.                    les objectifs apres que mario soit passer dessus) et c'est la qu'est le probleme*/
    6. void mapInit(int map[][NB_BLOC_HAUT], SDL_Rect *posMario, SDL_Rect *posOBJ[])
    7. {
    8.     FILE *mapFile = NULL;
    9.     if((mapFile = fopen("niveau.lvl", "r")) == NULL)
    10.     {
    11.         fprintf(stderr, "niveau.lvl introuvable");
    12.         exit(EXIT_FAILURE);
    13.     }
    14.     char niveau[NB_BLOC_LARG*NB_BLOC_HAUT+1] = {0};
    15.     fgets(niveau, NB_BLOC_LARG*NB_BLOC_HAUT, mapFile);
    16.     int i = 0, j = 0, k = 0, l = 0;
    17.     for(i = 0; i < NB_BLOC_LARG; i++)
    18.     {
    19.         for(j = 0; j < NB_BLOC_LARG; j++)
    20.         {
    21.             switch(niveau[k])
    22.             {
    23.                 case '0':
    24.                 map[i][j] = VIDE;
    25.                 k++;
    26.                 break;
    27.                 case '1':
    28.                 map[i][j] = MUR;
    29.                 k++;
    30.                 break;
    31.                 case '2':
    32.                 map[i][j] = CAISSE;
    33.                 k++;
    34.                 break;
    35.                 case '3':
    36.                 map[i][j] = OBJECTIF;
    37.                 /*a cet endroit l'exe s'arrete totalement sans prevenir*/
    38.                 posOBJ[l]->x = i;
    39.                 posOBJ[l]->y = j;
    40.                 l++;
    41.                 k++;
    42.                 break;
    43.                 case '4':
    44.                 map[i][j]= MARIO;
    45.                 k++;
    46.                 posMario->x = i;
    47.                 posMario->y = j;
    48.                 break;
    49.             }
    50.         }
    51.         j = 0;
    52.     }
    53. }


    Quelqu'un aurait une solution a mon probleme?Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      30 décembre 2007 à 15:50:17

      Salut Blast99, à quoi te servent les variables K et L et pourquoi re-initialiser j a 0 a la ligne 56 ?

      :magicien:
      • Partager sur Facebook
      • Partager sur Twitter
        30 décembre 2007 à 16:03:03

        La variable k sert a parcourir la chaine de caractere obtenu a partir de la lecture de fichier.
        La variable l sert a parcourir le tableau de type SDL_Rect de façon a obtenir toute les coordonnées des objectifs.
        Quand a la remise a 0 du j et sert a parcourir chaque case du tableau a 2 entrée
        (avec les deux boucle for a chaque ligne i on lit chaque case de colone j et a chaque retour a la ligne il faut remetre j a 0 => je precise ke les variables i et j me servent aussi de coordonnée).
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 décembre 2007 à 16:07:24

          Citation : Blast99

          Quand a la remise a 0 du j et sert a parcourir chaque case du tableau a 2 entrée
          (avec les deux boucle for a chaque ligne i on lit chaque case de colone j et a chaque retour a la ligne il faut remetre j a 0 => je precise ke les variables i et j me servent aussi de coordonnée).



          J se remet déjà à 0 à l'entrée de la boucle for ;)
          • Partager sur Facebook
          • Partager sur Twitter
            30 décembre 2007 à 16:12:13

            Ah tien! ben je savait pas... :'( (va faloir que je relise les cours de M@teo moi...) Merci pour votre attention mai quelqu'un aurait-il une raison pour laquelle l'exe s'arrete (sans erreur a la compilation pourtant :colere2: ...)

            Ah oui! Je precise aussi qu'il n'y aussi aucun message d'erreur lors de l'execution que ça soit de la part de windows ou de code::blocks
            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2008 à 20:16:34

              bonsoir blast99, ton problème viens peu être de ta variable "posOBJ". Envoi tu la bonne valeur du fait que ce soit un pointeur(adresse du pointeur ou variable pointer)
              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2008 à 20:29:07

                Je pense que oui je fait exactement la meme chose en dessous sauf que ce n'est pas un tableau:
                1. case '4':
                2.                 map[i][j]= MARIO;
                3.                 k++;
                4.                 posMario->x = i;
                5.                 posMario->y = j;
                6.                 break;


                Je precise que je suis sur que ce code fonctionne,je l'ai deja testé.

                il y aurait-il une demarche particuliere pour modifier des valeurs dans un tableau de structure en utilisant des pointeur?

                Bon ok j'ai rien dit et je suis vraiment un imbecile...
                j'avai oublier que les tableaux fesaient office de pointeur... :( pas cool...
                • Partager sur Facebook
                • Partager sur Twitter

                [TP SOKOBAN]

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown