以随机顺序重复显示两张图片

时间:2017-01-16 13:21:25

标签: c#

我是编程新手,因此有一个相当简单的问题。我想应该可以显示50次两张不同的图片,让我们说两个不同的彩色圆圈,按照随机顺序持续一秒或直到用户按下某个键但我不知道如何开始。有一个简单的方法吗?

也许从一系列动作(显示圆圈a或显示圆圈b)开始,然后随机选择其中一个,如下面的修改代码,来自另一个问题:

    class Program
{ static void Main(string[] args)
{
    List<Action> actions = new List<Action>();

    actions.Add(() => Program.circleA());
    actions.Add(() => Program.circleB());

    Random random = new Random();

    int selectedAction = random.Next(0, actions.Count()); //what does this line do?

    actions[selectedAction].Invoke(); // and this one?
}    

之后我必须定义Program.circleA和Program.circleB做什么,对吗?

我应该在循环中实现这个吗?如果是,我如何指定在达到突破标准之前每个圆圈必须显示50次?

我在互联网上搜索类似的问题,但无法找到解决方案,或者可能只是无法理解它们,这就是为什么我会问你们男孩和女孩:)

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你的问题基本上是&#34;如何调用随机行动/方法?&#34;和#34;我这样做的逻辑是否合适?&#34;。

从第二个开始(因为它更容易),答案将与这个简单问题的答案相同:&#34;它是否正在做它的工作?&#34;。这意味着如果你的逻辑表现得像你想要的那样,答案是肯定的。如果它没有,那么

第一个...它有点棘手,因为你可以有许多不同的解决方案。您可以使用ReflectionActionFunc,自定义delegate s ...

恕我直言)所以&#34;轻松&#34;方式(如果你有很多方法)将使用反射和自定义属性,如下所示:

public class RandomCircleMethodAttribute : Attribute
{
    public RandomCircleMethodAttribute() : base() { }
}

然后将此Attribute分配给您要调用的方法。然后使用Reflection只需获取MethodInfo指向这些方法并按如下方式调用它们:

public class RandomCircleMethods
{
    [RandomCircleMethod]
    public void circleA() { //.. your logic here
    }

    [RandomCircleMethod]
    public void circleB() { //.. your logic here
    }

    // add as many as you want
}

然后在您的EntryPoint(Main(string[] args))内:

List<MethodInfo> methods = typeof(RandomCircleMethods).GetMethods().Where(method => Attribute.IsDefined(method, typeof(RandomCircleMethod))).ToList();
int selectedAction = new Random().Next(0, methods.Count);
methods[selectedAction].Invoke(new RandomCircleMethods(), null);

这样您就不必创建Action列表。但这与你目前的工作方式一样好。

我会坚持你现在的逻辑,因为它使用Reflection时不那么容易混淆。