Partage
  • Partager sur Facebook
  • Partager sur Twitter

rand, en C

qui renvois toujorus la même chose...

Sujet résolu
    2 novembre 2006 à 18:05:09

    Bonsoir :)

    Voila, j'ai un problème avec Rand() : à chaque fois il me génère le même nombre.

    En bref : Dans mon programme en SDL, j'ai une fonction qui sert à généré une position aléatoire sur l'écran de jeu. Elle génère un nombre comprit entre 0 et la largeur ou la hauteur de la fenêtre (selon qu'on ai besoin d'une valeur X ou Y ;) )
    voici cette fonction :

    int generePositionSmiley(int XouY, int longueur)
    {
        int position = 0, min = 0, max = 0;

        if(XouY == X)
        {
        max = LARGEUR_ESPACE_JEU - longueur;
        position = (rand() % (max - min + 1)) + min;
        }

        if(XouY == Y)
        {
        max = HAUTEUR_ESPACE_JEU - longueur;
        position = (rand() % (max - min + 1)) + min;
        }

        return position;
    }


    Lorsque j'appelle pour la première fois la fonction, le nombre généré est différent à chaque nouvelle exécution du code. Mais lorsque, plus tard dans le code, je rappel cette fonction, elle me renvoi la même position X ou Y... Alors que j'ai une autre fonction sur la même page qui, elle, renvoi à chaque fois une valeur différente (elle marche donc).

    j'ai inclut time.h, j'ai initialisé au début du code (dans le main) srand(time(NULL));

    Je planche sur ce problème depuis longtemps, si vous trouvez une erreur, dites le ! merciii !!! :D

    O.G.R.E ;)
    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2006 à 18:06:26

      tu n'as pas mis le srand(time(NULL));
      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2006 à 18:09:30

        mais si ! je l'ai mis au début du code dans le main, comme je l'ai déjà dit :

        Citation : O.G.R.E

        j'ai inclut time.h, j'ai initialisé au début du code (dans le main) srand(time(NULL));



        Il ne faut l'initialiser qu'une fois non ?

        PS : c'est tout le temps toi qui répond à mes topics, laisse faire les autre un peu :p^^
        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2006 à 18:14:58

          Citation : O.G.R.E

          j'ai inclut time.h, j'ai initialisé au début du code (dans le main) srand(time(NULL));


          pas vu :o

          Citation : O.G.R.E

          Il ne faut l'initialiser qu'une fois non ?


          oui

          PS : c'est tout le temps toi qui répond à mes topics, laisse faire les autre un peu :p ^^</citation>
          pourquoi ? :-°

          je pense avoir trouvé :
          int position = 0, min = 0, max = 0;
          position = (rand() % (max - min + 1)) + min;

          donc position = (rand()% (0 - 0 + 1)) + 1 = rand()%1
          • Partager sur Facebook
          • Partager sur Twitter
            2 novembre 2006 à 18:32:31

            non, car entre temps
            max = LARGEUR_ESPACE_JEU - longueur;


            on peut remplacer mon code par :
            int generePositionSmiley(int XouY, int longueur)
            {
                int position = 0;

                if(XouY == X)
                position = (rand() % ((LARGEUR_ESPACE_JEU - longueur) - 0 + 1)) + 0;

                if(XouY == Y)
                position = (rand() % (HAUTEUR_ESPACE_JEU - longueur - 0 + 1)) + 0;

                return position;
            }


            mais je le trouve moin lisible comme ça ;)

            EDIT : si vous voulez, je peux mettre toute la partie de mon code concernée..
            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2006 à 20:01:24

              Y a un petit truc que je comprend pas (je suis nul en C...)
              Tu as 2 if dans ta fonction... Serait-t-il pas mieux de mettre 1 if et 1 else if?
              Jdis ça jdis rien...
              o_O

              Edit : scuze, j'ai rien dis, j'avais pas remarqué un truc... (manque de café...)
              • Partager sur Facebook
              • Partager sur Twitter
                2 novembre 2006 à 20:57:18

                Citation : O.G.R.E.


                Voila, j'ai un problème avec Rand() : à chaque fois il me génère le même nombre.


                Pas de problème avec ce code :

                #include <stdio.h>
                #include <string.h>
                #include <time.h>
                #include <stdlib.h>

                enum
                {
                   X,
                   Y,
                   LARGEUR_ESPACE_JEU = 12,
                   HAUTEUR_ESPACE_JEU = 8
                };


                int generePositionSmiley (int XouY, int longueur)
                {
                   int position = 0, min = 0;

                   if (XouY == X)
                   {
                      int max = LARGEUR_ESPACE_JEU - longueur;
                      position = (rand () % (max - min + 1)) + min;
                   }
                   else
                   {
                      int max = HAUTEUR_ESPACE_JEU - longueur;
                      position = (rand () % (max - min + 1)) + min;
                   }

                   return position;
                }

                int main (void)
                {
                   srand (time (NULL));
                   {
                      int i;
                      for (i = 0; i < 10; i++)
                      {
                         int longueur = 4;
                         {
                            int pos = generePositionSmiley (X, longueur);
                            printf ("posX=%d", pos);
                         }
                         {
                            int pos = generePositionSmiley (Y, longueur);
                            printf (", posY=%d\n", pos);
                         }
                      }
                   }
                   return 0;
                }


                posX=1, posY=0
                posX=1, posY=4
                posX=3, posY=2
                posX=3, posY=0
                posX=8, posY=4
                posX=6, posY=4
                posX=0, posY=3
                posX=5, posY=0
                posX=4, posY=0
                posX=8, posY=4

                Press ENTER to continue.

                Il y a donc autre chose ailleurs...
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  2 novembre 2006 à 21:17:20

                  j'ai trouvé l'erreur ! Effectivement, c'était ailleurs, j'avais mal regarder une ligne (bref les positions ne se réinitialisait pas..)
                  Merci -ed- pour ton test, ça m'a permit de regarder ailleurs :D
                  • Partager sur Facebook
                  • Partager sur Twitter

                  rand, en C

                  × 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