Partage
  • Partager sur Facebook
  • Partager sur Twitter

mon jeu

Sujet résolu
    9 avril 2006 à 19:52:39

    Bonjours a tous et a toute j'ai pris l'initiative de creer un mini jeu mais je suis confrontez a un probléme je ne sais pas où mettre la boucle de déplacement de l'ennemie vue que c'est une boucle infinie cela me bloque les commande voici mon code :
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <time.h>


    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *zozor = NULL, *ennemi = NULL;
        SDL_Rect positionZozor, positionEnnemi;
        SDL_Event event;
        int continuer = 1;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); /* Double Buffering */
        SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);

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

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

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

        while (1)
        {
            while(positionEnnemi.y <= 480)
            {
                positionEnnemi.y == positionEnnemi.y;
            }
            if(positionEnnemi.y >= 480)
            {
                srand(time(NULL));
                positionEnnemi.y = 0;
                positionEnnemi.x = (rand() % (640));
            }
        }

        SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_UP:
                            positionZozor.y--;
                            break;
                        case SDLK_DOWN:
                            positionZozor.y++;
                            break;
                        case SDLK_RIGHT:
                            positionZozor.x++;
                            break;
                        case SDLK_LEFT:
                            positionZozor.x--;
                            break;
                    }
                    break;
            }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
            SDL_BlitSurface(ennemi, NULL, ecran, &positionEnnemi);
            SDL_Flip(ecran);
        }

        SDL_FreeSurface(zozor);
        SDL_FreeSurface(ennemi);
        SDL_Quit();

        return EXIT_SUCCESS;
    }

    • Partager sur Facebook
    • Partager sur Twitter
    Oalley.fr une carte intelligente pour se déplacer et se retrouver !
      9 avril 2006 à 20:08:38

      positionEnnemi.y == positionEnnemi.y;

      gné ?!? o_O

      bon pis come tu dis c'est une boucle infini !!! Donc t'arrives jamais à la boucle d'évènement !!! ^^

      Bon je pense qui faut que tu supprime ta boucle infini et que t'inclus le code dans la boucle évènement :

      srand(time(NULL));
      while (continuer)
          {
              positionEnnemi.y = 0;
              positionEnnemi.x = (rand() % (640));
              SDL_WaitEvent(&event);
              switch(event.type)
              {
                  case SDL_QUIT:
                      continuer = 0;
                      break;
                  case SDL_KEYDOWN:
                      switch(event.key.keysym.sym)
                      {
                          case SDLK_UP:
                              positionZozor.y--;
                              break;
                          case SDLK_DOWN:
                              positionZozor.y++;
                              break;
                          case SDLK_RIGHT:
                              positionZozor.x++;
                              break;
                          case SDLK_LEFT:
                              positionZozor.x--;
                              break;
                      }
                      break;
              }

              SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
              SDL_BlitSurface(ennemi, NULL, ecran, &positionEnnemi);
              SDL_Flip(ecran);
          }


      Tu remarqueras que srand(time(NULL)); est à l'extérieur de la fonction c'est pasque ça sert à rien de le générer 50 000 fois !! ^^

      Voilà enfin après ça dépend ce que tu veux faire mais ça me semble une solution !
      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2006 à 20:37:12

        Faut pas mettre WaitEvent où l'ennemi ne bougera pas si tu ne bouges pas non plus ;) ==> utiliser PollEvent ce qui donne
        //ton code
        while (continuer)
            {
                positionEnnemi.y = 0;
                positionEnnemi.x = (rand() % (640));
                SDL_PollEvent(&event);
                switch(event.type)
                {
                    case SDL_QUIT:
                        continuer = 0;
                        break;
                    case SDL_KEYDOWN:
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_UP:
                                positionZozor.y--;
                                break;
                            case SDLK_DOWN:
                                positionZozor.y++;
                                break;
                            case SDLK_RIGHT:
                                positionZozor.x++;
                                break;
                            case SDLK_LEFT:
                                positionZozor.x--;
                                break;
                        }
                        break;
                }

                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                SDL_BlitSurface(ennemi, NULL, ecran, &positionEnnemi);
                SDL_Flip(ecran);
            }


        Enfin je pense , je suis loin d'être expert en la matière :-°
        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2006 à 21:03:19

          En fin de compte merci déjà de vos réponse mais je voulais faire dessandre l'ennemi dans le but étant de l'évitez mais voila le problème mainteant c'est que l'ennemie et placcée mais des que je fais un mouvement il se replace à un autre endroit. Merci de vos réponse.
          • Partager sur Facebook
          • Partager sur Twitter
          Oalley.fr une carte intelligente pour se déplacer et se retrouver !
            9 avril 2006 à 21:52:36

            Forcément le rand est à l'intérieur de la boucle mais le à l'extérieur, la position ne sera généré qu'un fois ensuite dans la boucle mais un positionEnnemmi.y++ et il descendra ^^
            Et n'oublis pas de mettre PollEvent et pas WaitEvent sinon il ne descendra que lorsque tu appuieras sur un flèche !
            • Partager sur Facebook
            • Partager sur Twitter
              9 avril 2006 à 21:59:18

              Héhé.. Je crois que j'ai compris ton problème:
              Tu as du placer ton ennemi dans la boucle ;) Il faut placer l'ennemi (comme le héros) avant la boucle et le deplacer a l'interieur :)
              Donc il faut faire:


              #include includes

              int main(int *argc, char bidule)
              {
                  /*declaration des variables*/
                 
                  /*placer tous les evenements*/
                  while(continuer == 1)
                  {
                      /*Faire un PollEvent pour voir si on a touche a un boutton*/
                          /*si on a touche un bouton, on execute ce qu'il y a a faire*/


                      /*deplacer les ennemis*/
                     

                      /*Si par hasard un evenement (ennemi et heros) depace l'écran on peut le replacer*/


                      /*Si notre heros touche un ennemi, il meurt ou perd de la vie*/
                  }
              }

              Et voila ;) (j'espere avoir bien expliqué :) )
              (je vais bientot mettre le lien de mon jeu si tu veux un exemple)
              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2006 à 15:23:19

                Ok merci je vais essayez ceci merci.
                • Partager sur Facebook
                • Partager sur Twitter
                Oalley.fr une carte intelligente pour se déplacer et se retrouver !
                  14 avril 2006 à 17:15:45

                  Alors voila j'ai de nouveau essayez de faire decendre l'ennemi mais il choisis toujours sa position aléatoirement voici mon code
                  #include <stdlib.h>
                  #include <stdio.h>
                  #include <SDL/SDL.h>
                  #include <SDL/SDL_image.h>
                  #include <time.h>


                  int main(int argc, char *argv[])
                  {
                      SDL_Surface *ecran = NULL, *zozor = NULL, *ennemi = NULL;
                      SDL_Rect positionZozor, positionEnnemi;
                      SDL_Event event;
                      int continuer = 1;

                      SDL_Init(SDL_INIT_VIDEO);

                      ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); /* Double Buffering */
                      SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);

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

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

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

                      SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */

                  srand(time(NULL));
                  while (continuer)
                      {
                          SDL_WaitEvent(&event);
                          switch(event.type)
                          {
                              case SDL_QUIT:
                                  continuer = 0;
                                  break;
                              case SDL_KEYDOWN:
                                  switch(event.key.keysym.sym)
                                  {
                                      case SDLK_UP:
                                          positionZozor.y--;
                                          break;
                                      case SDLK_DOWN:
                                          positionZozor.y++;
                                          break;
                                      case SDLK_RIGHT:
                                          positionZozor.x++;
                                          break;
                                      case SDLK_LEFT:
                                          positionZozor.x--;
                                          break;
                                  }
                                  break;


                          }

                          ///////////////////////////////////////////////////////////////////
                          //////////////////deplacement de l'ennemi/////////////////////////
                          if(positionEnnemi.y > 480)
                          {
                              positionEnnemi.y++;
                          }
                          else if(positionEnnemi.y <= 480)
                          {
                              positionEnnemi.x = (rand() % (640));
                              positionEnnemi.y = 0;
                          }
                          //////////////////////////////////////////////////////////////////
                          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                          SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                          SDL_BlitSurface(ennemi, NULL, ecran, &positionEnnemi);
                          SDL_Flip(ecran);
                      }

                      SDL_FreeSurface(zozor);
                      SDL_FreeSurface(ennemi);
                      SDL_Quit();

                      return EXIT_SUCCESS;
                  }

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Oalley.fr une carte intelligente pour se déplacer et se retrouver !
                    8 mai 2006 à 20:41:21

                    je n'ai pas suivi ton problème du début mes juste ton dernier message, si je lis bien ton code, je dirai que tu dois voir ton ennemis apparaitre aléatoirement tout en haut de ta fenêtre mais il ne descend jamais c'est ça ? si c'est ça regarde bien tes conditions à la fin de ton code, tu ne peux jamais entrer dans ton if vu que y ne sera jamais plus grand que 480 mais au contraire toujours plus petit... donc à chaque boucle tu laisse y à 0 et tu change x... mais il ne descendra jamais...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    mon jeu

                    × 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