For循环不工作-函数只被调用一次
本文关键字:调用 一次 循环 工作 函数 For | 更新日期: 2023-09-27 18:13:12
我的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;
}
似乎你的异步应该稍微更新:
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;
}
那么你需要做你的async权利(一个小修改):
public async void loopthegame(int amount)
{
for (int i = 0; i < amount; i++)
{
// this
await startgame();
}
}
也:
public async Task startgame()
{
//...
}
您的问题实际上是在您的随机数生成器。当您创建一个没有种子的随机数生成器(new random())时,它使用时间作为种子。它运行得足够快,以至于你每次都使用相同的种子,所以RandomNumber每次都返回相同的数字。而不是每次都创建一个新的Random,你应该有一个你可以多次使用的Random。在构造函数/主方法中创建一个,并在RandomNumber方法中重复使用。
用这段代码很容易测试:
for (int i = 0; i < 5; i++)
{
Random random = new Random();
Console.WriteLine(random.Next(1, 8));
}
试一下,它将打印相同的值五次