Partage
  • Partager sur Facebook
  • Partager sur Twitter

Timer

Allumer un bouton

    10 février 2021 à 21:41:22

    Bonjour!

    Voilà, je suis actuellement en train de coder une sorte de petit jeu pour un projet de cours et je me retrouve un petit peu bloqué....

    Je dois coder un super simon (le jeu des couleurs qui teste nos mémoires) en c# sous Visual studio avec des windows form. Jusqu'à présent, j'ai réussi à réaliser tout ce que voulais (couleurs random …).

    Pour montrer à l'utilisateur quel bouton il faut cliquer, je fais "allumer" des boutons en faisant changer les couleurs de fonds de ceux-ci.

    J'utilise donc une trame de type string de la forme "JJVBR", chaque premières lettres des couleurs. Chacune des lettres sont testée comme ci dessous afin de savoir quel bouton allumer:

    private void affich(string trame)

    {

    int block = 0;

    int niveau = 0;

    listBox1.Items.Add("Nombre lettres: " + trame.Length);

    while (block == 0)

    {

    if (niveau < trame.Length && buttonR.BackColor == Color.LightCoral && buttonB.BackColor == Color.MediumTurquoise && buttonY.BackColor == Color.PaleGoldenrod && buttonV.BackColor == Color.MediumSpringGreen)

    {

    for (int a = niveau; a < niveau + 1; a++)

    {

    if (trame[a] == 'R')

    {

    buttonR.BackColor = Color.Red;

    timer1.Start();

    buttonR.PerformClick();

    }

    else if (trame[a] == 'B')

    {

    buttonB.BackColor = Color.Blue;

    timer2.Start();

    buttonB.PerformClick();

    }

    else if (trame[a] == 'J')

    {

    buttonY.BackColor = Color.Yellow;

    timer3.Start();

    buttonY.PerformClick();

    }

    else

    {

    buttonV.BackColor = Color.Green;

    timer4.Start();

    buttonV.PerformClick();

    }

    }

    }

    else if (niveau == trame.Length)

    {

    for (int a = niveau; a <= (trame.Length) - 1; a++)

    {

    if (trame[a] == 'R')

    {

    buttonR.BackColor = Color.Red;

    timer1.Start();

    buttonR.PerformClick();

    }

    else if (trame[a] == 'B')

    {

    buttonB.BackColor = Color.Blue;

    timer2.Start();

    buttonB.PerformClick();

    }

    else if (trame[a] == 'J')

    {

    buttonY.BackColor = Color.Yellow;

    timer3.Start();

    buttonY.PerformClick();

    }

    else

    {

    buttonV.BackColor = Color.Green;

    timer4.Start();

    buttonV.PerformClick();

    }

    }

    block = 1;

    }

    else

    {

    }

    }

    }

    (en espérant que tout est lisible et compréhensible)

    Mon problème est donc: lors de mon débogage, je me suis rendu compte que j'avais une boucle infini puisque les timer.Start(), ne sont pas démarrer et je ne vois pas du tout comment faire autrement pour arriver à "allumer " ces boutons pendant un 2secondes puis les éteindre chacun à leurs tours automatiquement...

    Est-ce que quelqu'un aurait une petite idée ? N'hésitez pas ci vous avez des problèmes de clarté.

    Merci beaucoup d'avance!

    -
    Edité par Corentin Laval 10 février 2021 à 22:03:23

    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2021 à 9:25:38

      >(en espérant que tout est lisible

      Non, pensez à utiliser le bouton [</>] pour poster du code.

      Il ne faut pas faire cela dans une boucle mais faire en sorte de coder la fonctionnalité en utilisant les aspects "événementiels" du Framework .NET.

      Il faut donc utiliser des timer qui permettent de lancer une méthode à la fin du délai.

      Des classes de Timer, il y en a plein.

      Je vous conseille :

      https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.forms.timer?view=net-5.0

      (Utilisation de l'event "Tick")

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        11 février 2021 à 13:09:24

        un seul timer devrait suffire, et il faut penser à l'arrêter aussi (dans son événement Tick), sinon le timer fonctionne en continue.
        • Partager sur Facebook
        • Partager sur Twitter

        Timer

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown