Charger une image en C

Salut salut,

Je debute en programmation et je programme en C. Mais voila j'ai un probleme dans mon programme. Tout fonctionne mais à la fin du jeu, je voudrais que tout l'écran s'efface pour afficher une autre image.
J'ai essayé de simplement charger une autre image sur la meme variable, seulement l'image ne change que dès que je ferme le programme et si la condition du changement est réalisée.
J'ai cherché comment faire sur le net mais j'ai rien trouvé. Du coup quelqu'un sait il comment s'y prendre?
J'espère que mon problème est clair x)

Merci d'avance

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    On a besoin d'autres informations.
    J'imagine que tu utilises une bibliothèque graphique. Laquelle ? SDL ?
    1. Bonsoir,

      Oui j'utilise la SDL. J'ai pas encore testé d'autres bibliothèques.
      1. Ok j'espere que c'est pas trop mal ordonné

        #include <stdio.h>
        #include <stdlib.h>
        #include <SDL/SDL.h>

        void pause();

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

        SDL_Surface *ecran = NULL, *imageDeFond = NULL, *square = NULL;
        SDL_Rect positionSquare;
        SDL_Rect positionFond;
        SDL_Event event;
        int continuer = 1;

        // Pour info, "square" me sert de personnage à déplacer

        positionFond.x = 180;
        positionFond.y = 100;

        positionSquare.x = 190;
        positionSquare.y = 110;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(1200, 800, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Mon labyrinthe", NULL);

        square = SDL_LoadBMP("rectangle.bmp");
        SDL_BlitSurface(square, NULL, ecran, &positionSquare);

        imageDeFond = SDL_LoadBMP("laby.bmp");
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);

        SDL_EnableKeyRepeat(20, 3);
        while (continuer)
        {
        SDL_WaitEvent(&event);
        //deplacements au clavier

        switch(event.type)
        {
        case SDL_QUIT:
        continuer = 0;
        break;
        case SDL_KEYDOWN:
        switch(event.key.keysym.sym)
        {
        case SDLK_UP:
        if (positionSquare.y > 105)
        positionSquare.y-=5;
        else
        positionSquare.y+=0;
        break;
        case SDLK_DOWN:
        if (positionSquare.y < 650)
        positionSquare.y+=5;
        else
        positionSquare.y+=0;
        break;
        case SDLK_RIGHT:
        if (positionSquare.x < 970)
        positionSquare.x+=5;
        else
        positionSquare.x+=0;
        break;
        case SDLK_LEFT:
        if (positionSquare.x > 185)
        positionSquare.x-=5;
        else
        positionSquare.x+=0;
        break;
        case SDLK_ESCAPE:
        continuer = 0;
        break;
        }
        break;
        }
        // La condition, c'est parce que mon labyrinthe est plus petit que la fenetre

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 68, 129, 242));
        //puis reblitter la grille
        imageDeFond = SDL_LoadBMP("laby.bmp");
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
        SDL_BlitSurface(square, NULL, ecran, &positionSquare);
        //mise a jour de l'ecran
        SDL_Flip(ecran);
        }

        //Je pense que c'est ce truc là qui pose probleme et je suis meme pas sure
        // que tout soit utile, ou alors il est mal placé :/

        if(positionSquare.x==970 && positionSquare.y==650)
        {
        SDL_Flip(ecran);
        SDL_FreeSurface(square);
        SDL_FreeSurface(imageDeFond);
        positionFond.x = 0;
        positionFond.y = 0;
        imageDeFond = SDL_LoadBMP("final.bmp");
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);

        }

        SDL_Flip(ecran);

        pause();

        SDL_FreeSurface(square);
        SDL_FreeSurface(imageDeFond);
        SDL_Quit();

        return EXIT_SUCCESS;
        }

        void pause()
        {
        int continuer = 1;
        SDL_Event event;

        while (continuer)
        {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
        continuer = 0;
        break;
        case SDL_KEYDOWN:
        switch(event.key.keysym.sym)
        {
        case SDLK_ESCAPE:
        continuer = 0;
        break;
        }

        }
        }
        }
        1. Ah oui comme ma grille est une image de fond, évidemment je peux passer à travers les murs mais je verrai ça plus tard ^^