Partage
  • Partager sur Facebook
  • Partager sur Twitter

petit probleme avec la fonction rand()

Sujet résolu
    28 juin 2006 à 9:29:33

    Bonjour

    j'ai fait un jeu avec plusieurs balle qui rebondissent et donc chacune de ces balle on une direction en x et y.
    le probleme et que je veu que quand les balles apparaissent elle ai une direction aléatoire( 1 ou -1).

    j'ai donc mis dans une boucles for :

    ball[i].d.x = (rand() % 2) * 2 - 1;
    ball[i].d.y = (rand() % 2) * 2 - 1;

    le * 2 - 1 c 'est pour convertire le 0 en -1 et le laisser le 1 en 1


    je sais que ces cette ligne qui pose le probleme.
    le compilateur compile le programme ce lance mais des su'il arrive a cette endroit mon ordinateur le classe comme ne répondant plus.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 juin 2006 à 10:03:57

      Chez moi ça marche.
      Peut-être un soucis avec tes structures.
      • Partager sur Facebook
      • Partager sur Twitter
        28 juin 2006 à 10:11:19

        As tu inclus la librairie? Il te faut je crois une librairie "time". Verifie dans le cours de M@teo...
        • Partager sur Facebook
        • Partager sur Twitter
          28 juin 2006 à 10:14:48

          Il faut inclure time.h et bien initialisé srand(time(NULL));

          Mais normalement ca devrait pas faire planter ton programme si tu n'a pas mis srand donc je pense que l'erreur vient plutôt d'une erreur de manipulation de tes structures.
          • Partager sur Facebook
          • Partager sur Twitter
            28 juin 2006 à 12:32:00

            voici le code mes structure


            struct direction
            {
                   int x;
                   int y;
            };
            struct Ball
              {
                SDL_Rect coord; //coordoné
                direction d; // Direction
                SDL_Surface *s; //créé la surface de la balle
              };

            j'ai bien inclut time.h ---> j'ai d'autre rand qui marche
            et le
            srand(time(NULL));

            est placé juste avant la boucle car il ne le faut qu'une seul fois
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              28 juin 2006 à 12:41:34


              typedef struct
              {
                  int x;
                  int y;
              }direction;

              typedef struct
              {
                  SDL_Rect coord; //coordoné
                  direction d; // Direction
                  SDL_Surface *s; //créé la surface de la balle
              }ball;
              • Partager sur Facebook
              • Partager sur Twitter
                28 juin 2006 à 12:46:10

                quel est la différence ??
                je veu bien essayer
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  28 juin 2006 à 12:48:27

                  Tu déclares des types comme ça après tu peux créer ton tableau de ball.

                  Sinon, il faut rajouter le "struct direction d":

                  struct Ball
                  {
                      SDL_Rect coord; //coordoné
                      struct direction d; // Direction
                      SDL_Surface *s; //créé la surface de la balle
                  };
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 juin 2006 à 12:56:35


                    désolé mais je ne comprend vraiment pas car d'après ce que j'avais compris typedef permet de donner un alias.
                    or la je ne vois pas a quoi il sert.

                    J'ai quand meme essayé ta solution mais il y a une erreur au niveau de la définition du tableau
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      28 juin 2006 à 12:59:45

                      Après tu peut déclarer ton tableau de ball :

                      ball TableauBall[X];
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 juin 2006 à 13:09:25

                        Citation : manu31

                        Bonjour

                        j'ai fait un jeu avec plusieurs balle qui rebondissent et donc chacune de ces balle on une direction en x et y.
                        le probleme et que je veu que quand les balles apparaissent elle ai une direction aléatoire( 1 ou -1).

                        j'ai donc mis dans une boucles for :


                        ball[i].d.x = (rand() % 2) * 2 - 1;
                        ball[i].d.y = (rand() % 2) * 2 - 1;


                        le * 2 - 1 c 'est pour convertire le 0 en -1 et le laisser le 1 en 1

                        je sais que ces cette ligne qui pose le probleme.


                        Pas de problèmes avec ce code :

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

                        int main (void)
                        {
                           srand ((unsigned) time(NULL));

                           int i;

                           for (i = 0; i < 10; i++)
                           {
                              int x = (rand() % 2) * 2 - 1;
                              int y = (rand() % 2) * 2 - 1;

                              printf ("%3d%3d\n", x, y);
                           }

                           return 0;
                        }

                        Ca doit venir d'ailleurs...
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                        Anonyme
                          28 juin 2006 à 13:18:53

                          Citation : manu31

                          désolé mais je ne comprend vraiment pas car d'après ce que j'avais compris typedef permet de donner un alias.
                          or la je ne vois pas a quoi il sert.



                          Tu peux faire sans le typedef, il sert juste à simplifier l'écriture. Sans typedef il faudra déclarer:

                          struct direction d; /*dans la struct ball*/

                          et
                          struct ball tableau[X];
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 juin 2006 à 13:20:05

                            x = (rand() % 2) * 2 - 1;
                            y = (rand() % 2) * 2 - 1;

                            Moi je ferais plutôt ça :
                            x = (int)(((float)rand()/RAND_MAX) * 2); /* obtient 0 ou 1 */
                            x = x*2-1;                                /* obtient -1 ou 1 */
                            y = (int)(((float)rand()/RAND_MAX) * 2);
                            y = y*2-1;
                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 juin 2006 à 13:20:29

                              Citation : 0zero0

                              Citation : manu31

                              désolé mais je ne comprend vraiment pas car d'après ce que j'avais compris typedef permet de donner un alias.
                              or la je ne vois pas a quoi il sert.



                              Tu peux faire sans le typedef, il sert juste à simplifier l'écriture. Sans typedef il faudra déclarer:

                              struct direction d; /*dans la struct ball*/


                              et

                              struct ball tableau[X];

                              Je pense que tu l'embrouilles. Visiblement, le problème n'est pas là...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                28 juin 2006 à 13:21:46

                                Grace a 0zéro0 je me suis douté que ce n'était pas le rand qui me posait le probleme, mais mon probleme n'est pas réglé...

                                merci
                                dsl je vous donnerai mon code plus tard mais je doit y aller
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  28 juin 2006 à 13:22:56

                                  Citation : ed

                                  Je pense que tu l'embrouilles. Visiblement, le problème n'est pas là...



                                  Si, le problème est là puisqu'il n'a pas déclaré "struct direction d" dans sa struct ball. il a écrit "direction d".
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    28 juin 2006 à 13:29:12

                                    Citation : 0zero0

                                    Citation : ed

                                    Je pense que tu l'embrouilles. Visiblement, le problème n'est pas là...



                                    Si, le problème est là puisqu'il n'a pas déclaré "struct direction d" dans sa struct ball. il a écrit "direction d".


                                    Mais non, c'est autorisé en C++. Le problème signalé est 'plantage à l'exécution' et non 'ne compile pas.'.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Music only !
                                    Anonyme
                                      28 juin 2006 à 13:34:27

                                      Citation : ed

                                      Mais non, c'est autorisé en C++. Le problème signalé est 'plantage à l'exécution' et non 'ne compile pas.'.



                                      C'est exact, toutes mes excuses j'avais mal lu.
                                      Le problème doit donc être ailleurs
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        28 juin 2006 à 15:24:35

                                        je vous donne une plus grande partie de mon code au cas ou sa vous aiderait plus(pas trop quand même):
                                        voila les structure

                                        struct direction
                                        {
                                            int x;
                                            int y;
                                        };

                                        struct Ball
                                        {
                                            SDL_Rect coord; //coordoné
                                            struct direction d; // Direction
                                            SDL_Rect p2; // coin en bas a droite de la balle (pour gérer les collision)
                                            SDL_Surface *s; //créé la surface de la balle
                                        };

                                        depuis la derniere fois il n'y a que le p2 en plus c pour gérer les collision

                                        et voila la boucle :

                                        struct Ball ball[BALL_MAX];//définition des balles dans un tableau;
                                            srand(time(NULL))

                                            for(i = 0; i <= BALL_MAX; i++){
                                                  ball[i].coord.x = rand() % (SIZE_X - SIZE_B + 1);
                                                  ball[i].coord.y = rand() % (SIZE_Y - SIZE_B + 1);
                                                  ball[i].d.x = 1;//(rand() % 2) * 2 - 1; // vitesse de l'abscisse
                                                  //ball[i].d.y = (rand() % 2) * 2 - 1;  //vitesse de l'ordonné
                                                  ball[i].p2.x = ball[i].coord.x + SIZE_B;
                                                  ball[i].p2.y = ball[i].coord.y + SIZE_B;
                                                  ball[i].s = SDL_CreateRGBSurface(SDL_HWSURFACE, SIZE_B, SIZE_B, 24, 0, 0, 0, 0);
                                                  SDL_FillRect(ball[i].s, NULL, SDL_MapRGB(ecran->format, 255, 0, 0));
                                            }   

                                        on peut remarque que le probleme ne se pose pas avec un SDL_Rect donc dans le besoin j'aurais pu transformerais direction en un SDL_Rect...
                                        mais j'aimerai bien connetre la cause de cette erreur.
                                        merci d'avance
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          29 juin 2006 à 12:11:07

                                          personne ne veut m'aider???
                                          a l'aide...
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          petit probleme avec la fonction rand()

                                          × 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