Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以随机顺序重复显示两张图片_C# - Fatal编程技术网

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

C# 以随机顺序重复显示两张图片,c#,C#,我是编程新手,因此有一个相当简单的问题 我想应该可以将两张不同的图片显示50次。让我们假设两个不同颜色的圆圈,以随机顺序持续一秒钟或直到用户按下某个键,但我不知道如何开始。有简单的方法吗 也许从一个动作列表开始(显示圆圈a或圆圈b)并随机选择其中一个动作更容易,就像下面从不同问题中修改的代码一样: class Program { static void Main(string[] args) { List<Action> actions = new L

我是编程新手,因此有一个相当简单的问题

我想应该可以将两张不同的图片显示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?
    }
类程序
{
静态void Main(字符串[]参数)
{
列表操作=新建列表();
actions.Add(()=>Program.circleA());
actions.Add(()=>Program.circleB());
随机=新随机();
int selectedAction=random.Next(0,actions.Count());//这一行做什么?
动作[selectedAction].Invoke();//这一个呢?
}
然后我必须定义Program.circleA和Program.circleB做什么,对吗

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


我在互联网上搜索过类似的问题,但我找不到解决方案,或者可能就是无法理解它们,所以我要问大家:)

如果我正确理解了你们的问题,你们的问题基本上是“我如何调用随机操作/方法?”和“我这样做的逻辑正确吗?”

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

对于第一个…它有点棘手,因为您可以有许多不同的解决方案。您可以使用
反射
操作
函数
,自定义
委托
s

IMHO)所以“简单”的方法(如果你有很多方法)就是使用反射和自定义属性,比如:

public class RandomCircleMethodAttribute : Attribute
{
    public RandomCircleMethodAttribute() : base() { }
}
然后将此
属性
分配给您要调用的方法。然后使用,只需获取指向这些方法的
MethodInfo
,并按如下方式调用它们:

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

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

    // add as many as you want
}
然后在入口点内(
Main(string[]args)
):

List methods=typeof(RandomCircleMethods).GetMethods().Where(method=>Attribute.IsDefined(method,typeof(RandomCircleMethod)).ToList();
int selectedAction=new Random().Next(0,methods.Count);
方法[selectedAction].Invoke(新的RandomCircleMethods(),null);
这样,您不必创建
操作列表
。但这与您当前完成工作的方式一样好


不过,我会坚持您当前的逻辑,因为它比使用反射更容易混淆。

让我们从基础开始……您想使用WinForms、WPF或其他GUI框架吗?我个人建议使用WPF,但其他人可能对此有不同的看法。不过,您声明您对编程是新手。具体取决于使用方式新“新”是的,在转到GUI之前,您最好再编写几个控制台应用程序,然后编写一个新的简单GUI应用程序,在其中显示图像,然后再尝试使图像显示基于时间和随机。我希望使用WinForms将其保持在非常基本和较低的级别。我认为显示红色ci是相当简单的画一个圆圈或黄色圆圈,并计算用户按某个键的次数。要点是:你应该首先尝试显示一个圆圈,而不显示任何花哨的额外内容。成功后,你可以继续显示两个圆圈和其他附加功能。但你当前的代码没有显示基本内容,因此可能的答案需要涵盖许多与此无关的内容至少应该属于不同的问题。
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);