многократное отображение двух изображений в случайном порядке

я новичок в программировании и поэтому у меня есть довольно простой вопрос. Я думаю, что должно быть возможно показать 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?
}    

после этого я должен определить, какая программа.circleA и программа.circleB, верно?

должен ли я реализовать это в цикле? если да, как указать, что каждый круг должен быть показан 50 раз, прежде чем будут выполнены критерии пробоя?

Я искал в интернете похожие проблемы, но не мог найти решение или, может быть, просто не мог понять их, поэтому я спрашиваю вас, ребята и девушки 🙂

Метки

1 ответ

  1. Если я правильно понял ваш вопрос, ваш вопрос в основном «как вызвать случайное действие / метод?»and» Is my logic of doing that OK?».

    Начиная со второго (потому что это проще ), ответ будет таким же, как ответ на этот простой вопрос: «делает ли он свою работу?». То есть, если ваша логика ведет себя так, как вы хотели, ответ-да. Если нет, то нет.

    С первым… Это немного сложнее, потому что у вас может быть много различных решений. Вы можете использовать Reflection, Action, Func, custom delegates …

    (IMHO) Итак, «легкий» путь ( если у вас есть sh.. тонны методов ) будет использовать отражение и пользовательские атрибуты, как так :

    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.