2010-12-07 3 views
0

나는 달팽이를위한 수업을 가지고있다.C#, Random으로 이상한 것들.

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

나는 timerSnailSpeed ​​타이머 틱 때 자신의 이동 속도를 변경 해야하는 4 달팽이 개체 ...

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

을 만든 그러나 문제는 그 속도가 각각 임의로 변경하지 않는다는 것입니다 달팽이 개체보다는 오히려 모두 함께. 어떤 아이디어?

감사합니다.

+1

Snail1에서 Snail4 인스턴스는 어떻게 구성합니까? – dthorpe

+0

달팽이 Snail1; 달팽이 Snail2; 달팽이 Snail3; 달팽이 Snail4; – Rob

+0

그리고 나서 InitializeComponent(); Snail1 = new snails(); etc. – Rob

답변

5

Random의 인스턴스 네 개를 만들고 기본 시드는 시간 기반이므로 거의 동일한 난수 시퀀스를 생성합니다. 이것을 피하려면 snails의 인스턴스가 Random의 동일한 인스턴스를 공유하도록하십시오.

+0

>>> 달팽이의 인스턴스가 이것을 피하기 위해 무작위의 동일한 인스턴스를 공유하게하십시오. 정말로 이해하지 못했습니다 ... 어떻게해야합니까? – Rob

+1

또는 임의의 다른 시드 (예 : 개체 해시 값)를 제공하십시오. speedRand = new 임의 ((int32) this.GetHashValue()); – dthorpe

+0

달팽이 생성시 임의의 객체 전달 (생성자에 매개 변수 추가 후 'snails1 = new snails (random);') – RvdK