2013-11-09 31 views
0

我对c#非常陌生,我正在尝试创建一个沙盒类型的游戏,我使用随机数字来挑选哪些块在哪里,但是我的块总是相同的,因为它总是选择相同的“随机数”。这是我的代码:随机数字全部相同

int x = 0; 

    public GameWindow() 
    { 
     InitializeComponent(); 
     Blocks(); 
    } 

    private void BlockThree() 
    { 

    } 

    private void BlockTwo() 
    { 
     x = 2; 
     BlockData(); 
    } 

    private void BlockOne() 
    { 
     x = 1; 
     BlockData(); 
    } 

    private async void Blocks() 
    { 
     await Task.Delay(5000); 
     BlockOne(); 
     await Task.Delay(5000); 
     BlockTwo(); 
     await Task.Delay(5000); 
     BlockThree(); 
    } 

    private async void BlockData() 
    { 
     Random rand = new Random(); 

     int num = rand.Next(1, 2); 

     if (num == 1) 
     { 
      if (x == 1) 
      { 
       pictureBox1.Image = Image.FromFile("C:/Program Files (x86)/SandBoxEngine/grass_side.png"); 
      } 
      else 
      { 
       if (x == 2) 
       { 
        pictureBox2.Image = Image.FromFile("C:/Program Files (x86)/SandBoxEngine/grass_side.png"); 
       } 
      } 
     } 
     else 
     { 
      if (num == 2) 
      { 
       if (x == 1) 
       { 
        pictureBox1.Image = Image.FromFile("C:/Program Files (x86)/SandBoxEngine/dirt.png"); 
       } 
       else 
       { 
        if (x == 2) 
        { 
         pictureBox2.Image = Image.FromFile("C:/Program Files (x86)/SandBoxEngine/dirt.png"); 
        } 
       } 
      } 
     } 
    } 
} 
+1

只使用1个“随机”实例,否则几乎总会得到相同的随机数。 – Styxxy

+0

[c#随机字符串生成器]的可能的重复(http://stackoverflow.com/questions/1122483/c-sharp-random-string-generator) –

+2

(基本上有这种重复的负载。)另见http: //csharpindepth.com/Articles/Chapter12/Random.aspx –

回答

2

您需要指定随机作为全局。

private Random rand = new Random(); 

然后使用rand.Next

而且

rand.Next(1,2); 

将始终返回1 拿到1或2使用本。

rand.Next(1,3); 
+0

你也会发现低位趋向于0,1,0,1,0,1(至少已经习惯了)。 –

+0

谢谢你,它似乎仍然工作也使随机全球给我一个错误。 – user2974743

+0

你能告诉你如何让它成为全球性的,错误是什么? – deathismyfriend