Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de programmation - "jeu snake"

Sujet résolu
    24 octobre 2008 à 15:03:38

    Bonjour. J'ai décidé de programmer un jeu assez complexe, qui ressemble un peu à Snake, en gros. Je viens de commencer la programmation, pour l'instant le programme ne fait qu'afficher une image avec une musique de fond et quand on appuie sur ESPACE (normalement), l'écran doit afficher une autre image (celle du menu). Or, ça ne fonctionne pas. Pourriez-vous m'aider s'il vous plaît ? Voici le code source (je l'ai découpé en plusieurs fichiers) :

    les constantes :

    /* Constantes.h
       
       Définit les constantes qui sont appliquées à tout le programme */
    
    #define TAILLE_BLOC       15
    #define NB_BLOCS_LARGEUR  40
    #define NB_BLOCS_HAUTEUR  30
    
    #define LARGEUR_FENETRE   NB_BLOCS_LARGEUR * TAILLE_BLOC
    #define HAUTEUR_FENETRE   NB_BLOCS_HAUTEUR * TAILLE_BLOC
    


    le fichier source principal :

    /* Snake_main.c
       Créé par Ulrich LEJOYEUX le 23/10/08 à 19h11
       
       Le classique jeu du serpent - Fenêtre principale */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <FMOD/fmod.h>
    
    #include "constantes.h"
    #include "menu.h"
    
    int main(int argc, char* argv[])
    {
        int continuer = 1, tempsActuel = 0, tempsPrecedent = 0;
        SDL_Event event;
        SDL_Surface *ecran = NULL, *menu = NULL, *texte = NULL;
        SDL_Rect position, positionTexte;
        TTF_Font *police = NULL;
        SDL_Color couleurBlanche = {255, 255, 255};
        FMUSIC_MODULE *musique = NULL;
        
        //Chargement de la SDL
        FSOUND_Init(44100, 32, 0);
        TTF_Init();
        SDL_Init(SDL_INIT_VIDEO);
        
        //Chargement de la police
        police = TTF_OpenFont("arial.ttf", 20);
        
        musique = FMUSIC_LoadSong("musique.mid");
        
        //Chargement de la fenêtre
        SDL_WM_SetIcon(IMG_Load("icone.png"), NULL);
        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Snake v. Krls", NULL);
        menu = IMG_Load("fond.png");
        texte = TTF_RenderText_Solid(police, "Appuyez sur la touche espace pour commencer", couleurBlanche);
        FMUSIC_PlaySong(musique);
        FMUSIC_SetLooping(musique, 1);
        
        while(continuer)
         {
                         SDL_PollEvent(&event);
                         switch(event.type)
                         {
                                           case SDL_QUIT:
                                                continuer = 0;
                                                break;
                                           case SDL_KEYDOWN:
                                                switch(event.key.keysym.sym)
                                                {
                                                                            case SDLK_SPACE:
                                                                                 afficherMenu(ecran, musique);
                                                                                 continuer = 0;
                                                                                 break;
                                                }
                                                break;
                         }
                                              
                         //Blits
                         position.x = 0;
                         position.y = 0;
                         SDL_BlitSurface(menu, NULL, ecran, &position);
                         
                         positionTexte.x = (LARGEUR_FENETRE - texte->w) / 2;
                         positionTexte.y = HAUTEUR_FENETRE - (texte->h + 10);
                         
                         tempsActuel = SDL_GetTicks();
                         if(tempsActuel - tempsPrecedent > 500 && tempsActuel - tempsPrecedent < 1500)
                                        SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
                         else if(tempsActuel - tempsPrecedent > 1500)
                              tempsPrecedent = tempsActuel;
                         else if(tempsActuel - tempsPrecedent < 500)
                              SDL_Delay(500 - (tempsActuel - tempsPrecedent));
                         
                         SDL_Flip(ecran);
         }
        //Déchargements
        SDL_FreeSurface(menu);
        SDL_FreeSurface(texte);
        SDL_Quit();
        TTF_CloseFont(police);
        TTF_Quit();
        FSOUND_Close();
        return EXIT_SUCCESS;
    }
    


    le header "menu" :

    /* Snake_menu.h
       
       Contient les headers des fonctions de "menu.c" */
    
    void afficherMenu(SDL_Surface *ecran, FMUSIC_MODULE *musique);
    


    le fichier source "menu" :

    /* Snake_menu.c
       Créé par Ulrich LEJOYEUX le 24/10/08 à 16h01
       
       Affiche le menu du jeu */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <FMOD/fmod.h>
    
    #include "constantes.h"
    
    void afficherMenu(SDL_Surface *ecran, FMUSIC_MODULE *musique)
    {
         SDL_Surface *fond = NULL;
         int continuer = 1;
         SDL_Rect position;
         SDL_Event event;
         
         fond = IMG_Load("fond1.png");
         
         while(continuer)
         {
                         SDL_WaitEvent(&event);
                         switch(event.type)
                         {
                                           case SDL_QUIT:
                                                continuer = 0;
                                                break;
                         }
                         position.x = 0;
                         position.y = 0;
                         SDL_BlitSurface(fond, NULL, ecran, &position);
         }
         
    }
    


    Merci d'avance pour votre aide.




    • Partager sur Facebook
    • Partager sur Twitter

    problème de programmation - "jeu snake"

    × 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