0

我的 for 循环有一些问题。我试过把它放在不同的地方,但还是没有运气。我正在做一个随机改变矩形不透明度的项目(我有红色、黄色、蓝色和绿色)。我让项目工作,以便它选择一种颜色,提高不透明度,等待,然后降低不透明度。但是,我想重复这一点,循环不会。

这是我的代码:

private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

        public void Start_Tapped_1(object sender, TappedRoutedEventArgs e)
        {
            loopthegame(5);
        }

        public void loopthegame(int amount) 
        {
            for (int i = 0; i < amount; i++) {
                startgame();
            }

        }

        public async void startgame()
        {
                int randomcolor = RandomNumber(1, 8);
                switch (randomcolor)
                {
                    case 1:
                        Blue.Opacity = 1;
                        break;
                    case 2:
                        Red.Opacity = 1;
                        break;
                    case 3:
                        Yellow.Opacity = 1;
                        break;
                    case 4:
                        Green.Opacity = 1;
                        break;
                    case 5:
                        Blue.Opacity = 1;
                        break;
                    case 6:
                        Red.Opacity = 1;
                        break;
                    case 7:
                        Yellow.Opacity = 1;
                        break;
                    case 8:
                        Green.Opacity = 1;
                        break;
                }
                await Task.Delay(1000);
                Blue.Opacity = 0.25;
                Red.Opacity = 0.25;
                Yellow.Opacity = 0.25;
                Green.Opacity = 0.25;
        }
4

3 回答 3

0

看来您的 async 应该稍微更新一下:

public void loopthegame(int amount) 
{
    for (int i = 0; i < amount; i++) {
        Task<int> t = startgame();
        await t;
    }

}
//...
public async Task<int> startgame()
{
     int randomcolor = RandomNumber(1, 8);
     switch (randomcolor)
     {
          case 1:
              Blue.Opacity = 1;
              break;
          //...
          case 8:
              Green.Opacity = 1;
              break;
      }
      await Task.Delay(1000);
      Blue.Opacity = 0.25;
      Red.Opacity = 0.25;
      Yellow.Opacity = 0.25;
      Green.Opacity = 0.25;

      return randomcolor;
}
于 2013-05-11T15:21:12.813 回答
0

好吧,您需要正确执行异步操作(稍作修改):

    public async void loopthegame(int amount)
    {
        for (int i = 0; i < amount; i++)
        {
            // this 
            await startgame();
        }
    }

还:

    public async Task startgame()
    {
       //...
    }
于 2013-05-11T15:23:12.810 回答
0

您的问题实际上出在您的随机数生成器中。当您创建一个没有种子的随机数生成器 (new Random()) 时,它使用时间作为种子。这运行得足够快,以至于您每次都使用相同的种子,因此 RandomNumber 每次都返回相同的数字。与其每次都创建一个新的 Random,不如拥有一个可以多次使用的 Random。在您的构造函数/主方法中创建一个,并在您的 RandomNumber 方法中重复使用它。

这很容易用这段代码测试:

for (int i = 0; i < 5; i++)
{
    Random random = new Random();
    Console.WriteLine(random.Next(1, 8));
}

试试看,它会打印五次相同的值。

于 2013-05-11T15:23:45.800 回答