IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème variable random pas très random..


Sujet :

C++

  1. #1
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut Problème variable random pas très random..
    Bonjour à tous,
    j'ai un petit souci dont je n'arrive pas à me défaire, il s'agit d'un random pour une variable...

    Je m'explique, je développe un jeu au tour par tour, et chaque fois des dés sont lancés, donc 2 dés, 2 variable de 1 à 6 aléatoires. MAis j'ai beau compiler, recompiler, les variables random suivent le même cheminement à chaque fois... Le premier dé me sort toujours un 6, puis un 2, puis un 4, etc..

    Comment faire pour que chaque fois le random marche vraiment?

    Voilà mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    srand(rand());
        de_1= (int)rand();
        de_1=(de_1%6+1);/*pour mettre alea de 1 à 6*/
    Merci d'avance si quelqu'un peut m'aider là dessus^^!
    Défenseur de l'Apéro Social

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Tu utilises toujours la même graine.

  4. #4
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Ah! Super, j'avais même pas pensé à la FAQ!
    Merci beaucoup, ça rox là!
    Défenseur de l'Apéro Social

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Bonjour,
    Sinon tu as une fonction dans la bibliothèque boost.
    boost.random
    www.boost.org

    un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boost::minstd_rand generator(static_cast<unsigned int>(std::time(0)));
    boost::uniform_int<boost::minstd_rand, int> uni(generator, 1, 15); // entre 1 et 15
    int nb = uni();
    A bientôt

  6. #6
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Le problème est résolu, mais j'ai un autre truc qui me chagrine et je ne trouve pas la solution dans la FAQ!
    En fait imaginons que dans le jeu, il y a un lancé de 2 dés, soit 2 random. La tout marche, mais une fonction spéciale du jeu permet l'utilisation d'une ébotte secrète" qui permet 2 lancers de 2 dés. Donc ma fonction bonus se présente comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int Carte :: bonus()
    {
        Joueur J;
        int de;
        de=J.lancer_des();
        return de;
    }
    Donc je me douterais peut être que c'est le srand(time = (NULL)) qui fait que au même moment, les randoms sont égaux, mais comment faire dans ce cas là?


    EDIT: J'évite d'utiliser trop de bibliothèque, car mon application devra être par la suite multi plateforme... Donc je pense que limiter les biblis m'aiderais...
    Défenseur de l'Apéro Social

  7. #7
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    srand() ne doit être appelé qu'une seule fois... au début du programme. (tu l'appelles à chaque fois?)


    pour boost : il est portable. (linux / windows en tout cas ).
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  8. #8
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Ok, je l'ai mis au tout début, et ça marche, niquel! Pas besoin de boost du coup!
    Défenseur de l'Apéro Social

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    As-tu aussi lu cet article ?

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par Goten Voir le message
    pour boost : il est portable. (linux / windows en tout cas ).
    Et même Mac...
    Il supporte un grand panel de compilateurs, surtout pour une bibliothèque comme boost.random qui n'utilise pas des techniques très avancées niveau C++...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rnd(), la fonction random qui ne random pas
    Par zarohn dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/05/2010, 14h46
  2. Problème Borland builder + boost lib (random.hpp)
    Par visodyn dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/02/2008, 17h29
  3. Problème Borland builder + boost lib (random.hpp)
    Par visodyn dans le forum Boost
    Réponses: 2
    Dernier message: 04/02/2008, 17h21
  4. Problème d'affichage IE/Firefox (c'est pas très original)
    Par jpparmentier dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 01/02/2007, 12h01
  5. random pas si random que ça
    Par Biosox dans le forum C
    Réponses: 6
    Dernier message: 31/07/2006, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo