Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ca marche pô !!!!

14 mai 2006 à 17:36:28

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

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL, *zozor = NULL;
    SDL_Rect positionZozor;
    int continuer = 1;
    SDL_Event event;
    int tempsActuel = 0, tempsPrecedent = 0;
    int sensX = 1;
    int sensY = 1;
    int marche = 1;

    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    SDL_WM_SetCaption("Zozor se déplace", NULL);

    zozor = IMG_Load("zozor.bmp");
    SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format,0,0,255));

    positionZozor.x = 0;
    positionZozor.y = ecran->h / 2 - zozor->h / 2;

    SDL_BlitSurface(zozor,NULL,ecran,&positionZozor);
    SDL_Flip(ecran);

    SDL_WarpMouse(0, 0);

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

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

                    case SDLK_p:
                        marche = 1;
                        while (marche)
                        {
                            SDL_Event pause;
                            SDL_WaitEvent(&pause);
                            switch (pause.type)
                            {
                                case SDL_KEYDOWN:
                                    switch (pause.key.keysym.sym)
                                    {
                                        case SDLK_p:
                                            marche = 0;
                                            break;

                                        case SDLK_ESCAPE:
                                            exit(0);
                                            break;
                                    }
                                    break;
                            }
                        }
                        break;
                }
        }

        tempsActuel = SDL_GetTicks();
        if (tempsActuel - tempsPrecedent > 30) /* Si 30 ms se sont écoulées */
        {
            if (sensX)
                positionZozor.x++;
            else
                positionZozor.x--;

            if (sensY)
                positionZozor.y++;
            else
                positionZozor.y--;

            if (positionZozor.x == (640 - zozor->w))
                sensX = 0;

            if (positionZozor.x == 0)
                sensX = 1;

            if (positionZozor.y == (480 - zozor->h))
                sensY = 0;

            if (positionZozor.y == 0)
                sensY = 1;

            tempsPrecedent = tempsActuel; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
        }
        else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
        {
            SDL_Delay(30 - (tempsActuel - tempsPrecedent));
        }

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor); /* On place zozor à sa nouvelle position */
        SDL_Flip(ecran); /* On met à jour l'affichage */
    }

    SDL_FreeSurface(zozor);
    SDL_Quit();
    return EXIT_SUCCESS;
}


Ceci est le code que j'utilise pour réaliser un exercice des cours de C++ (Partie III/Chapitre 6, je crois!), mais je ne comprends pas pourquoi Zozor ne se déplace plus normalement quand je rappuyes sur P.
On dirait que marche retourne à 1 alors qu'il ne va pas dans la boucle.
Merci de pouvoir m'aider.
  • Partager sur Facebook
  • Partager sur Twitter
14 mai 2006 à 17:37:16

Ce sujet a un titre qui ne décrit pas correctement le sujet, ou le titre est en majuscules. Vous pouvez re-poster votre sujet en rectifiant ce point.

Voici quelques correspondances pour vous aider à choisir au mieux votre titre :


Merci de votre compréhension.

[Ceci est une réponse semi-automatique]
  • Partager sur Facebook
  • Partager sur Twitter