Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mario Sokoban >> changer de niveau

Sujet résolu
    22 mai 2006 à 22:20:35

    J'essaie actuellement de créer une aventure complète à 20 niveaux pour le jeu Mario Sokoban. J'utilise biensur la touche Pg up afin de changer de carte, mais le problème est qu'il faut toujours que j'appuie 2 fois de suite sur cette touche afin que le niveau change réellement... Et le programme enregistre pourtant bien que j'ai appuyé 2 fois sur la touche, ce qui signifie que je n'ai accès qu'à 10 des 20 niveaux...
    M'est avis que l'anomalie provient de la lecture des fichiers, mais je vous laisse en juger : voici les parties que j'ai modifiées à partir du programme brut :
    //---LECTURE DU FICHIER---//

            char    ligneFichier[NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 1] = {0};
            int     i = 0,
                            j = 0;
           
            while (i < indice)
            {
                    fgets(ligneFichier, NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 1, fichier);
                    i++;
            }

    //---CHANGEMENT DE CARTE---//

                            else if (evenement.key.keysym.sym == SDLK_PAGEUP)
                            {
                                    if (indiceCarte < NOMBRE_CARTES)
                                    {
                                            indiceCarte++;
                                    }
                                    if (!chargerNiveau(carte, indiceCarte))
                                    {
                                            exit(EXIT_FAILURE);
                                    }
                            }
                            else if (evenement.key.keysym.sym == SDLK_PAGEDOWN)
                            {
                                    if (indiceCarte > 1)
                                    {
                                            indiceCarte--;
                                    }
                                    if (!chargerNiveau(carte, indiceCarte))
                                    {
                                            exit(EXIT_FAILURE);
                                    }
                            }

    N'hésitez pas à me demander d'autres parties du code, je ne pouvais pas me permettre d'afficher l'intégralité, trop longue...
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 mai 2006 à 0:05:26

      Bonjour, merci, aurevoir ^^

      Donne nous plus de code au niveau de la gestion des fichiers car on peut pas faire grand chose avec sa :p

      PS: J'te conseil d'utiliser un switch au lieu de faire 40 mille else if :)
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2006 à 7:25:27

        Pour ce qui est des else if, c'est une habitude que j'ai prise et gardée, elle ne m'a jamais posé de problème donc je pense inutile de me forcer à changer... Voici le code de chargement d'un niveau :
        //*******************************//
        //---CHARGEMENT D'UN NIVEAU---//
        //******************************//

        bool chargerNiveau(int carte[][NOMBRE_BLOCS_HAUTEUR], int indice)
        {

        //---OUVERTURE DU FICHIER NIVEAUX.LVL---//

                FILE* fichier = fopen("Niveaux.lvl", "r");
                if (fichier == NULL)
                {
                        return false;
                }

        //---LECTURE DU FICHIER---//

                char    ligneFichier[NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 1] = {0};
                int     i = 0,
                                j = 0;
               
                while (i < indice)
                {
                        fgets(ligneFichier, NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 1, fichier);
                        i++;
                }
               
                i = 0;
                while (i < NOMBRE_BLOCS_HAUTEUR)
                {
                        while (j < NOMBRE_BLOCS_LARGEUR)
                        {
                                if (ligneFichier[i * NOMBRE_BLOCS_LARGEUR + j] == '0')
                                {
                                        carte[j][i] = 0;
                                }
                                else if (ligneFichier[i * NOMBRE_BLOCS_LARGEUR + j] == '1')
                                {
                                        carte[j][i] = 1;
                                }
                                else if (ligneFichier[i * NOMBRE_BLOCS_LARGEUR + j] == '2')
                                {
                                        carte[j][i] = 2;
                                }
                                else if (ligneFichier[i * NOMBRE_BLOCS_LARGEUR + j] == '3')
                                {
                                        carte[j][i] = 3;
                                }
                                else if (ligneFichier[i * NOMBRE_BLOCS_LARGEUR + j] == '4')
                                {
                                        carte[j][i] = 4;
                                }
                                j++;
                }
                j = 0;
                i++;
            }

        //---FERMETURE DU FICHIER---//

            fclose(fichier);
            return true;
        }


        EDIT >> problème résolu...
        • Partager sur Facebook
        • Partager sur Twitter

        Mario Sokoban >> changer de niveau

        × 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