2010-12-07 9 views
0

私はカタツムリ用のクラスを持っています。私はtimerSnailSpeedタイマーティックたときに自分の移動速度を変更することになっている4つのカタツムリのオブジェクト、...C#、奇妙なものとランダム.Next

 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; 
    } 

を作成しているしかし、問題はその速度はそれぞれにランダムに変化していないということです

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; } 
} 

カタツムリのオブジェクトではなく、それらのすべてを一緒に。何か案は?

ありがとうございます!

+1

Snail1からSnail4のインスタンスをどのように構築していますか? – dthorpe

+0

カタツムリSnail1; カタツムリSnail2; カタツムリSnail3; カタツムリSnail4; – Rob

+0

、その後、InitializeComponent()の後。 Snail1 = new snails();など – Rob

答えて

5

あなたはRandomの4つのインスタンスを作成していると、デフォルトの種子は、時間ベースであるため、彼らが最も可能性の高いすべての乱数の同じシーケンスを生成します。これを避けるには、snailsのインスタンスをRandomという同じインスタンスで共有します。

+0

>>>これを避けるために、カタツムリのインスタンスがランダムの同じインスタンスを共有するようにします。 本当に理解していない...どうすればいいですか? – Rob

+1

または、各ランダムにオブジェクトのハッシュ値などの異なるシードを付けます。 speedRand = newランダム((int32)this.GetHashValue()); – dthorpe

+0

は、コンストラクタにパラメータを追加(カタツムリの作成時にランダムにオブジェクトを渡した後、「Snail1 =新しいカタツムリ(ランダム)カタツムリを;」呼び出す – RvdK