Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une balle qui va toujours dans les memes directions

    8 août 2006 à 20:54:06

    Mon problème c'est que la balle va toujours dans les même direction =/ et ça fait déja un bon moment que je cherche et je n'ai toujours pas trouvé mon érreur j'aimerais savoir c'est quoi


    #include <SDL/SDL.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <SDL/SDL_ttf.h>
    #include <time.h>
    #define REFRESH_TIME 30



    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL;
    SDL_Surface *rectangle = NULL;
    SDL_Surface *batte = NULL;
    SDL_Surface *balle = NULL;
    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
    rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 32, 0, 0, 0, 0);
    batte = SDL_LoadBMP("bat2.bmp");
    balle = SDL_LoadBMP("rouge1.bmp");
    SDL_EnableKeyRepeat(10, 10);
    SDL_Rect positionrect;
    positionrect.x = 640/2-220/2;
    positionrect.y = 480/2-180/2;
    srand(time(NULL));
    long dballe = (rand() % (360 - 0 + 1)) + 0;
    double sballe = 1.5;
    SDL_Rect balleposition;
    balleposition.x = 640/2-32/2;
    balleposition.y = 480/2-32/2;

    SDL_Rect batposition;

    batposition.x = 640/2-64/2;
    batposition.y = 400;
    long ellapsed_time = 0;
    long start_time = 0;
        int continuer = 1;
        SDL_Event event;


        while (continuer)
        {
            if (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_LEFT:
            batposition.x -= 5;
            break;
            case SDLK_RIGHT:
            batposition.x += 5;
            break;
            }
            break;
            }
            }

            ellapsed_time = SDL_GetTicks() - start_time;
            if (ellapsed_time < REFRESH_TIME)
            {
                SDL_Delay(REFRESH_TIME - ellapsed_time);
            }

        balleposition.y +=sballe*sin(dballe*(180/3.1416));
        balleposition.x +=sballe*cos(dballe*(180/3.1416));
        SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,255,0));
        SDL_FillRect(rectangle,NULL,SDL_MapRGB(ecran->format,255,255,255));
        SDL_BlitSurface(rectangle,NULL,ecran,&positionrect);
        SDL_SetColorKey(batte, SDL_SRCCOLORKEY, SDL_MapRGB(batte->format, 66, 65, 0));
        SDL_SetColorKey(balle, SDL_SRCCOLORKEY, SDL_MapRGB(batte->format, 255, 255, 255));
        SDL_BlitSurface(batte,NULL,ecran,&batposition);
        SDL_BlitSurface(balle,NULL,ecran,&balleposition);
        SDL_Flip(ecran);

        }
    SDL_FreeSurface(balle);
    SDL_FreeSurface(batte);
    SDL_FreeSurface(rectangle);
    SDL_Quit();
    return 0;
    }


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 août 2006 à 23:08:59

      si tu expliqué un peu mieux le principe c'est quoi ta balle et si tu mettai des commentaire sur ton code peut etre que j'arriverai a comprendre ton probleme mais la dsl je vois pas
      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2006 à 0:19:17

        Bah, la trajectoire de ta balle si j'ai bien compris, elle repose essentiellement sur ces lignes:

        long dballe = (rand() % (360 - 0 + 1)) + 0;

        ET:

        balleposition.y +=sballe*sin(dballe*(180/3.1416)); balleposition.x +=sballe*cos(dballe*(180/3.1416));


        Et là je vois pas pourquoi ta trajectoire changerais puisque tes calculs prennent des variables qui ont toujours la même valeur...Enfin il me semble.

        La position de ta batte n'a pas l'air prise en compte dans ton calcul. donc , le seul truc qui devrait apporter une modification, c'est le calcul avec rand non?

        Et il est possible que le problème vienne de là.

        Bref, toujours est-il qu'un bonjour et un SVP n'ont jamais tué personne. Surtout quand on demande un service...


        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2006 à 5:26:55

          Merci,je crois que je n'ai pas été assez clair. Ce que je veux dire c'est que quand je lance mon application chaque fois c'est toujours les mêmes direction que la balle a.
          • Partager sur Facebook
          • Partager sur Twitter

          Une balle qui va toujours dans les memes directions

          × 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