title: Simon Game in C#
body: <p>I've been creating the game Simon in a windows form using C#. I'm having a problem in the labels that blink to show the pattern. When one label is required to blink twice (because it appears in the pattern twice) it will only blink once. Also, in general the labels will sometimes not blink in the correct order they are meant to (i.e the second in the pattern blinks before the first). Any assistance in how to fix this or in general how to improve on my code would be great. I have only been using C# for the last few weeks and it's part of a university project.
  Have attached the code and a picture of what the windows form looks like.
  <a href="https://i.stack.imgur.com/qb6se.png" rel="nofollow noreferrer">Windows Form</a></p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq; 
  using System.Text;
  using System.Windows.Forms;
  
  namespace Simon2
  {
      public partial class Form1 : Form
      {
          List&lt;int&gt; sequence = new List&lt;int&gt;();
          Random rnd = new Random();
          int number = 0;
  
          public Form1()
          {
              InitializeComponent();
  
              sequence.Add(rnd.Next(0, 4));
              hey();
          }
  
          void hey() 
          {
              foreach (int colour in sequence)
              {
                  switch (colour)
                  {
                      case 0: {
                          timer1.Enabled = true;
                          break;
                      }
                      case 1: {
                          timer2.Enabled = true;
                          break;
                      }
                      case 2: {
                          timer3.Enabled = true;
                          break;
                      }
                      case 3: {
                          timer4.Enabled = true;
                          break;
                      }
                  }
              }
          }
  
          void pattern(int colour)
          {
              if (sequence[number] == colour)
              {                   
                  label1.Text = ("Score: " + sequence.Count);
                  sequence.Add(rnd.Next(0, 4));
                  number = 0;
                  hey();
              }
              else
              {
                  MessageBox.Show("Fail!");
                  Application.Exit();
              }                 
          }
  
          private void timer1_Tick(object sender, EventArgs e)
          {
              if (Red1.BackColor == Color.Transparent)
              {
                  Red1.BackColor = Color.Red;
                  timer1.Interval = 300;
              }
              else
              {
                  Red1.BackColor = Color.Transparent;
                  timer1.Interval = 300;
                  timer1.Stop();                  
              }
          }
  
          private void timer2_Tick(object sender, EventArgs e)
          {
              if (Blue1.BackColor == Color.Transparent)
              {
                  Blue1.BackColor = Color.Blue;
                  timer2.Interval = 300;
              }
              else
              {
                  Blue1.BackColor = Color.Transparent;
                  timer2.Interval = 300;
                  timer2.Stop();                  
              }
          }
  
          private void timer3_Tick(object sender, EventArgs e)
          {
              if (Yellow1.BackColor == Color.Transparent)
              {
                  Yellow1.BackColor = Color.Yellow;
                  timer3.Interval = 300;
              }
              else
              {
                  Yellow1.BackColor = Color.Transparent;
                  timer3.Interval = 300;
                  timer3.Stop();                 
              }
          }
  
          private void timer4_Tick(object sender, EventArgs e)
          {
              if (Green1.BackColor == Color.Transparent)
              {
                  Green1.BackColor = Color.Lime;
                  timer4.Interval = 300;
              }
              else
              {
                  Green1.BackColor = Color.Transparent;
                  timer4.Interval = 300;
                  timer4.Stop();                  
              }
          }
  
          private void Red_Click(object sender, EventArgs e)
          {
              pattern(0);             
          }
  
          private void Blue_Click(object sender, EventArgs e)
          {
              pattern(1);
          }
  
          private void Yellow_Click(object sender, EventArgs e)
          {
              pattern(2);
          }
  
          private void Green_Click(object sender, EventArgs e)
          {
              pattern(3);
          }
      }
  }
  </code></pre>