2010-12-07 5 views
0

J'ai une classe pour les escargots.C#, des choses étranges avec Random.Next

class snails 
{ 
    Random speedRand = new Random(); 
    public int SnaleOffset = 9; 
    int speed; 
    public void snailChangeSpeed() { this.speed = speedRand.Next(3)+1; } 
    public void snailGo() { this.SnaleOffset = this.SnaleOffset + this.speed; } 
} 

J'ai créé 4 objets d'escargot, qui sont censés changer leur vitesse de déplacement lorsque la minuterie timerSnailSpeed ​​tiques ...

 private void timerSnailSpeed_Tick(object sender, EventArgs e) 
    { 
     Snail1.snailChangeSpeed(); 
     Snail2.snailChangeSpeed(); 
     Snail3.snailChangeSpeed(); 
     Snail4.snailChangeSpeed(); 

    private void timerSnailMove_Tick(object sender, EventArgs e) 
    { 
     Snail1.snailGo(); 
     Snail2.snailGo(); 
     Snail3.snailGo(); 
     Snail4.snailGo(); 
     imgSnail1.Left = Snail1.SnaleOffset; 
     imgSnail2.Left = Snail2.SnaleOffset; 
     imgSnail3.Left = Snail3.SnaleOffset; 
     imgSnail4.Left = Snail4.SnaleOffset; 
    } 

Pourtant, le problème est que leur vitesse ne change pas au hasard pour chaque objet d'escargot, plutôt que pour tous ensemble. Des idées?

Merci!

+1

Comment construisez-vous les instances Snail1 à Snail4? – dthorpe

+0

escargots Escargot1; escargots Escargot2; escargots Escargot3; escargots Escargot4; – Rob

+0

puis après InitializeComponent(); Snail1 = nouveaux escargots(); etc. – Rob

Répondre

5

Vous créez quatre instances de Random et depuis la graine par défaut est temps basée, ils seront tous très probablement pour la même séquence de nombres aléatoires. Laissez les instances de snails partager la même instance de Random pour éviter cela.

+0

>>> Laissez les instances des escargots partager la même instance de Random pour éviter cela. Je n'ai pas vraiment compris ... comment je fais ça? – Rob

+1

Ou donnez à chaque Random une graine différente, telle que peut-être la valeur de hachage de l'objet. speedRand = new Aléatoire ((int32) this.GetHashValue()); – dthorpe

+0

Passer l'objet aléatoire sur la création d'un Escargot (ajouter un paramètre au constructeur, puis appeler 'snails Snail1 = nouveaux escargots (aléatoire);' – RvdK

Questions connexes