Charger une image en C

Klapaucius Messages postés 4 Statut Membre -  
Klapaucius Messages postés 4 Statut Membre -
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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    On a besoin d'autres informations.
    J'imagine que tu utilises une bibliothèque graphique. Laquelle ? SDL ?
    0
  2. Klapaucius Messages postés 4 Statut Membre
     
    Bonsoir,

    Oui j'utilise la SDL. J'ai pas encore testé d'autres bibliothèques.
    0
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Et pourrais-tu montrer ton code ?
    0
  4. Klapaucius Messages postés 4 Statut Membre
     
    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;
    }

    }
    }
    }
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Klapaucius Messages postés 4 Statut Membre
     
    Ah oui comme ma grille est une image de fond, évidemment je peux passer à travers les murs mais je verrai ça plus tard ^^
    0