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

Silverlight Discussion :

Random pas si aléatoire que ça


Sujet :

Silverlight

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut Random pas si aléatoire que ça
    Bonjour,

    J'ai un petit problème dans une fonction utilisant la classe Random.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
            private void Addcarottes(carotte.carottesize size, int num)
            {
                Random rand = new Random();            
                for (int i = 0; i < num; i++)
                {
                        carotte newcarotte = new carotte(size);
                        double left = rand.Next(1, 764);
                        double top = rand.Next(1, 564);
                        carottes.Add(newcarotte);
                        parent.Children.Add(newcarotte);
                        do{
                        newcarotte.SetValue(Canvas.LeftProperty, (double)rand.Next(1, 764));
                        newcarotte.SetValue(Canvas.TopProperty, (double)rand.Next(1, 564));
                        } while (((double)newcarotte.GetValue(Canvas.LeftProperty) > ((double)lapin.GetValue(Canvas.LeftProperty) + 3 * lapin.Width) || (double)newcarotte.GetValue(Canvas.LeftProperty) < ((double)lapin.GetValue(Canvas.LeftProperty) - 3*lapin.Width)) && (((double)newcarotte.GetValue(Canvas.TopProperty) > ((double)lapin.GetValue(Canvas.TopProperty) + 2 * lapin.Height)) || ((double)newcarotte.GetValue(Canvas.LeftProperty) < ((double)lapin.GetValue(Canvas.TopProperty) - 2*lapin.Height))));
                        newcarotte.Velocity = gameLevel;
                        newcarotte.Direction = rand.Next(0, 359);
                        double rads = (newcarotte.Direction - 90) * 0.0174532925199433;
                        newcarotte.XSpeed = newcarotte.Velocity * Math.Cos(rads);
                        newcarotte.YSpeed = newcarotte.Velocity * Math.Sin(rads);
                        newcarotte.InUse = true;
                        if (size == carotte.carottesize.Ice)
                        {
                            numIce++;
                            Icetouchable++;
                            newcarotte.touchable = true;
                        }
                    }
                }
            }
    Lorsque j'utilise plusieurs fois ma fonction, j'ai mes carottes glacées qui apparaissent superposées à mes carottes normales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Addcarottes(carotte.carotteSize.Ice, null, 3);
                Addcarottes(carotte.carotteSize.Large, null, numLevel - 1);
    Mes carottes glacées sont donc créées et ajoutées au canevas puis les carottes normale le sont elles aussi. Le problème, c'est que mon random me sort deux fois la même série de chiffre, ce qui donne à mon lapin bien du fil à retordre car ses carottes sont indissociable car ayant la même vitesse, la même direction et le même point de départ...

    Est-ce modifiable?

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Je ne fais pas de SilverLight, mais j'ai déjà rencontré ça. Crée deux instances de la classe Random, avec un Seed différent ou bien ajoute un
    après l'appel à la méthode Random.Next, lorsque tu fais plusieurs Next à la suite.

    A l'époque ça avait réglé le problème en ce qui me concerne. En espérant que cela fonctionne ici aussi.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    D'accord et merci à toi mais je ne suis pas dans le cas d'un thread là...


  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    En SilverLight il y a un thread principal tout de même ? Pour exécuter l'application. A l'époque en faisant ça, je limitais les doublons du fait d'un écart de temps plus grand entre 2 générations successives.

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ou tu peux créer ton objet Random une seule fois au lieu de le créer 50 fois. La génération n'en sera que plus aléatoire.

    Petit tips

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newcarotte.SetValue(Canvas.LeftProperty...)
    Je te conseille grandement de créer 2 propriétés X et Y dans ta classe Carotte (on mets un C majuscule en général pour les classes), qui font un GetValue pour le get et un SetValue pour le set pour le LeftProperty et le TopProperty.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    Merci du conseil Skyounet, ma classe avait bien une majuscule mais j'en ai modifié le nom ici. Vraiment pratique les vars X et Y intégrées, je n'y avais pas pensé ...

    Merci StormimOn pour m'avoir fait comprendre pourquoi ça plantait

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

Discussions similaires

  1. De l'aléatoire pas si aléatoire que ca
    Par SofEvans dans le forum Débuter
    Réponses: 2
    Dernier message: 05/11/2009, 15h53
  2. random pas si random que ça
    Par Biosox dans le forum C
    Réponses: 6
    Dernier message: 31/07/2006, 19h21
  3. [RANDOM] Des chiffres pas si aléatoires que ca...
    Par djsbens dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 16/03/2006, 12h22
  4. Réponses: 3
    Dernier message: 16/11/2004, 15h51
  5. [Random] générer 2 aléatoires successivement
    Par Shabata dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/11/2004, 22h59

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