Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème dans le tp sokoban

    21 avril 2006 à 19:58:26

    Salut les zeros.

    J'ai un problème en ce moment dans la réalisation du TP Sokoban. Lorsque le menu s'affiche, j'ai le choix entre afficher l'aide (en appuyant sur 3), voir les crédits (touche 4)ou jouer ou éditer un niveau. Lorsque je vais dans l'aide, les pages d'aide s'affichent normalement. Mais lorsque j'appuie sur Echap pour revenir au menu, le programme ne répond plus... je ne peux donc plus revoir mes pages d'aides, ni quitter le programme. pourquoi?

    je vous envoie le bout de code concerné:
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "constantes.h"






    int main(int argc, char *argv[])
    {

        SDL_Surface *ecran = NULL, *intro = NULL, *menu = NULL;
        SDL_Surface *aide1 = NULL, *aide2 = NULL, *credit = NULL;

        SDL_Rect posIntro, posMenu, posAide1, posAide2, posCredit;

        SDL_Event event;

        int continuer = 1, afficheIntro = 1, afficheAide1 = 1, afficheAide2 = 1, afficheCredit = 1, afficheMenu = 1;


        SDL_Init(SDL_INIT_VIDEO);

        SDL_WM_SetIcon(IMG_Load("icon.png"), NULL);

        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Mario Sokoban Final Edition !!!", NULL);

        intro = IMG_Load("intro.jpg");

        menu = IMG_Load("menu.jpg");

        aide1 = IMG_Load("aide1.jpg");

        aide2 = IMG_Load("aide2.jpg");

        credit = IMG_Load("crédit.jpg");

        posMenu.x = 0;
        posMenu.y = 0;

        posIntro.x = 0;
        posIntro.y = 0;

        posAide1.x = 0;
        posAide1.y = 0;

        posAide2.x = 0;
        posAide2.y = 0;

        posCredit.x = 0;
        posCredit.y = 0;





        while(afficheIntro)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                afficheIntro = 0;
                break;

                case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                    continuer = 0;
                    break;

                    case SDLK_j:
                    afficheIntro = 0;
                    break;
                }
                break;
            }
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(intro, NULL, ecran, &posIntro);
            SDL_Flip(ecran);
        }



        while(afficheMenu)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {

                case SDL_QUIT:
                afficheMenu = 0;
                break;

                case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {



                    case SDLK_KP3:
                    while(afficheAide1)
                    {

                    SDL_WaitEvent(&event);
            switch(event.type)
            {

                case SDL_QUIT:
                afficheAide1 = 0;
                break;

                case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {

                    case SDLK_ESCAPE:
                    afficheAide1 = 0;
                    break;

                    case SDLK_RIGHT:

                    while(afficheAide2)
                    {

                    SDL_WaitEvent(&event);
                    switch(event.type)
                   {

                  case SDL_QUIT:
                  afficheAide2 = 0;
                  break;

                  case SDL_KEYDOWN:
                  switch(event.key.keysym.sym)
                 {

                     case SDLK_ESCAPE:
                     afficheAide2 = 0;
                     break;

                 }
                 break;
                   }
                   SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
                   SDL_BlitSurface(aide2, NULL, ecran, &posAide2);
                   SDL_Flip(ecran);
                    }

                    break;
                }
                break;
            }
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(aide1, NULL, ecran, &posAide1);
            SDL_Flip(ecran);
                    }
                    break;
                }
                break;
            }
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(menu, NULL, ecran, &posMenu);
            SDL_Flip(ecran);
        }



        SDL_Quit(); // Arrêt de la SDL

        return EXIT_SUCCESS; // Fermeture du programme
    }


    j'ai pas encore écris la fonction jouer, et j'ai pas encore inséré la possbilité de voir les crédits dans mon code . Je veux d'abord résoudre ce problème.

    Merci d'avance à celui ou celle qui pourra m'aider. :)
    • Partager sur Facebook
    • Partager sur Twitter

    problème dans le 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