private void Temporizador_Cartas_Tick(object sender, EventArgs e)
 {
     try
     {
         int Resto     = Índice_Reparto % 3;
         int Iteración = Índice_Reparto / 3;
         if (Resto == 0)
         {
             Picture_1.Image = Program.Matriz_Cartas_79[Lista_Montón_Izquierdo[Iteración]];
             Picture_1.Invalidate();
             Picture_1.Update();
         }
         else if (Resto == 1)
         {
             Picture_2.Image = Program.Matriz_Cartas_79[Lista_Montón_Centro[Iteración]];
             Picture_2.Invalidate();
             Picture_2.Update();
         }
         else if (Resto == 2)
         {
             Picture_3.Image = Program.Matriz_Cartas_79[Lista_Montón_Derecho[Iteración]];
             Picture_3.Invalidate();
             Picture_3.Update();
         }
         Índice_Reparto++;
         Pintar_Progreso.FillRectangle(Pincel_Progreso, 0, 0, (Índice_Reparto * Ancho_Progreso) / 21, 18);
         Picture_Progreso.Invalidate();
         Picture_Progreso.Update();
         if (Índice_Reparto >= 21) // Reset.
         {
             Temporizador_Cartas.Stop();
             Índice_Reparto = 0;
             SystemSounds.Beep.Play();
         }
     }
     catch (Exception Excepción) { Depurador.Escribir_Excepción(Excepción != null ? Excepción.ToString() : null); Variable_Excepción_Total++; Variable_Excepción = true; }
 }
 /// <summary>
 /// Function that starts a new game or continues to the next round of a current game.
 /// </summary>
 /// <param name="Montón">A number between 1 (left) to 3 (right) to select the pile that contains the desired card. Use zero to start a new game.</param>
 internal void Jugar(int Montón)
 {
     try
     {
         Temporizador_Cartas.Stop(); // Always stop the card timer.
         if (Montón < 0)             // Quit and reset the game.
         {
             Ronda           = 0;
             Índice_Reparto  = 0;
             Picture_1.Image = Program.Matriz_Cartas_79[0];
             Picture_2.Image = Program.Matriz_Cartas_79[0];
             Picture_3.Image = Program.Matriz_Cartas_79[0];
             Pintar_Progreso.Clear(Color.Transparent);
             Picture_1.Invalidate();
             Picture_2.Invalidate();
             Picture_3.Invalidate();
             Picture_Progreso.Invalidate();
             Picture_1.Update();
             Picture_2.Update();
             Picture_3.Update();
             Picture_Progreso.Update();
             Menú_Contextual_Mostrar_Ayuda.Enabled      = true;
             Menú_Contextual_Aleatorizar_Cartas.Enabled = true;
             SystemSounds.Asterisk.Play();                // After another click the game will be restarted.
         }
         else if (Montón < 1 || Montón > 3 || Ronda <= 0) // Start a new game.
         {
             if (Menú_Contextual_Mostrar_Ayuda.Checked)
             {
                 Menú_Contextual_Mostrar_Ayuda.PerformClick();
             }
             Menú_Contextual_Mostrar_Ayuda.Enabled      = false;
             Menú_Contextual_Aleatorizar_Cartas.Enabled = false;
             if (!Variable_Aleatorizar_Cartas) // Use the 21 default cards by Jupisoft.
             {
                 //List<int> Lista_Temporal = new List<int>(new int[] { 23, 24, 25, 26, 27, 28, 29, 37, 38, 39, 40, 41, 42, 43, 65, 66, 67, 68, 69, 70, 71 }); // Default 21 cards.
                 List <int> Lista_Temporal = new List <int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 }); // Default 21 cards.
                 Lista_21_Cartas_Usadas = new List <int>();
                 Lista_Montón_Izquierdo = new List <int>();
                 Lista_Montón_Centro    = new List <int>();
                 Lista_Montón_Derecho   = new List <int>();
                 for (int Índice = 21; Índice >= 1; Índice--) // Randomize the card order.
                 {
                     int Índice_Aleatorio = Program.Rand.Next(0, Lista_Temporal.Count);
                     Lista_21_Cartas_Usadas.Add(Lista_Temporal[Índice_Aleatorio]);
                     if (Índice % 3 == 0)
                     {
                         Lista_Montón_Izquierdo.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     else if (Índice % 3 == 2)
                     {
                         Lista_Montón_Centro.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     else if (Índice % 3 == 1)
                     {
                         Lista_Montón_Derecho.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     Lista_Temporal.RemoveAt(Índice_Aleatorio);
                     Lista_21_Cartas = Lista_21_Cartas_Usadas.GetRange(0, Lista_21_Cartas_Usadas.Count);
                 }
                 Lista_Temporal = null;
             }
             else // Use 21 random cards on each game, so don't expect to pick always the same!
             {
                 List <int> Lista_Temporal = new List <int>();
                 for (int Índice = 1; Índice <= 78; Índice++) // Add the 78 cards.
                 {
                     Lista_Temporal.Add(Índice);
                 }
                 Lista_21_Cartas_Usadas = new List <int>();
                 Lista_Montón_Izquierdo = new List <int>();
                 Lista_Montón_Centro    = new List <int>();
                 Lista_Montón_Derecho   = new List <int>();
                 for (int Índice = 21; Índice >= 1; Índice--) // Randomly pick 21 cards.
                 {
                     int Índice_Aleatorio = Program.Rand.Next(0, Lista_Temporal.Count);
                     Lista_21_Cartas_Usadas.Add(Lista_Temporal[Índice_Aleatorio]);
                     if (Índice % 3 == 0)
                     {
                         Lista_Montón_Izquierdo.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     else if (Índice % 3 == 2)
                     {
                         Lista_Montón_Centro.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     else if (Índice % 3 == 1)
                     {
                         Lista_Montón_Derecho.Add(Lista_Temporal[Índice_Aleatorio]);
                     }
                     Lista_Temporal.RemoveAt(Índice_Aleatorio);
                     Lista_21_Cartas = Lista_21_Cartas_Usadas.GetRange(0, Lista_21_Cartas_Usadas.Count);
                 }
                 Lista_Temporal = null;
             }
             Ronda           = 1; // Get ready to show the cards in their current order.
             Índice_Reparto  = 0; // Reset all variables and controls.
             Picture_1.Image = Program.Matriz_Cartas_79[0];
             Picture_2.Image = Program.Matriz_Cartas_79[0];
             Picture_3.Image = Program.Matriz_Cartas_79[0];
             Pintar_Progreso.Clear(Color.Transparent);
             Picture_1.Invalidate();
             Picture_2.Invalidate();
             Picture_3.Invalidate();
             Picture_Progreso.Invalidate();
             Picture_1.Update();
             Picture_2.Update();
             Picture_3.Update();
             Picture_Progreso.Update();
             //Temporizador_Cartas_Tick(Temporizador_Cartas, EventArgs.Empty); // Start at once.
             Temporizador_Cartas.Start(); // Start a new game.
         }
         else if (Montón == 1)            // Left.
         {
             Lista_21_Cartas.Clear();     // Make the "sandwich" with the 3 piles.
             Lista_21_Cartas.AddRange(Lista_Montón_Centro.GetRange(0, Lista_Montón_Centro.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Izquierdo.GetRange(0, Lista_Montón_Izquierdo.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Derecho.GetRange(0, Lista_Montón_Derecho.Count));
             Lista_Montón_Izquierdo.Clear(); // Rest the 3 piles.
             Lista_Montón_Centro.Clear();
             Lista_Montón_Derecho.Clear();
             for (int Índice = 0; Índice < 21; Índice += 3) // Redo the 3 piles of 7 cards.
             {
                 Lista_Montón_Izquierdo.Add(Lista_21_Cartas[Índice]);
                 Lista_Montón_Centro.Add(Lista_21_Cartas[Índice + 1]);
                 Lista_Montón_Derecho.Add(Lista_21_Cartas[Índice + 2]);
             }
             Ronda++;
             if (Ronda <= 3)
             {
                 Índice_Reparto  = 0;
                 Picture_1.Image = Program.Matriz_Cartas_79[0];
                 Picture_2.Image = Program.Matriz_Cartas_79[0];
                 Picture_3.Image = Program.Matriz_Cartas_79[0];
                 Pintar_Progreso.Clear(Color.Transparent);
                 Picture_1.Invalidate();
                 Picture_2.Invalidate();
                 Picture_3.Invalidate();
                 Picture_Progreso.Invalidate();
                 Picture_1.Update();
                 Picture_2.Update();
                 Picture_3.Update();
                 Picture_Progreso.Update();
                 //Temporizador_Cartas_Tick(Temporizador_Cartas, EventArgs.Empty); // Start at once.
                 Temporizador_Cartas.Start();
             }
         }
         else if (Montón == 2)        // Center.
         {
             Lista_21_Cartas.Clear(); // Make the "sandwich" with the 3 piles.
             Lista_21_Cartas.AddRange(Lista_Montón_Izquierdo.GetRange(0, Lista_Montón_Izquierdo.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Centro.GetRange(0, Lista_Montón_Centro.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Derecho.GetRange(0, Lista_Montón_Derecho.Count));
             Lista_Montón_Izquierdo.Clear(); // Rest the 3 piles.
             Lista_Montón_Centro.Clear();
             Lista_Montón_Derecho.Clear();
             for (int Índice = 0; Índice < 21; Índice += 3) // Redo the 3 piles of 7 cards.
             {
                 Lista_Montón_Izquierdo.Add(Lista_21_Cartas[Índice]);
                 Lista_Montón_Centro.Add(Lista_21_Cartas[Índice + 1]);
                 Lista_Montón_Derecho.Add(Lista_21_Cartas[Índice + 2]);
             }
             Ronda++;
             if (Ronda <= 3)
             {
                 Índice_Reparto  = 0;
                 Picture_1.Image = Program.Matriz_Cartas_79[0];
                 Picture_2.Image = Program.Matriz_Cartas_79[0];
                 Picture_3.Image = Program.Matriz_Cartas_79[0];
                 Pintar_Progreso.Clear(Color.Transparent);
                 Picture_1.Invalidate();
                 Picture_2.Invalidate();
                 Picture_3.Invalidate();
                 Picture_Progreso.Invalidate();
                 Picture_1.Update();
                 Picture_2.Update();
                 Picture_3.Update();
                 Picture_Progreso.Update();
                 //Temporizador_Cartas_Tick(Temporizador_Cartas, EventArgs.Empty); // Start at once.
                 Temporizador_Cartas.Start();
             }
         }
         else if (Montón == 3)        // Right.
         {
             Lista_21_Cartas.Clear(); // Make the "sandwich" with the 3 piles.
             Lista_21_Cartas.AddRange(Lista_Montón_Izquierdo.GetRange(0, Lista_Montón_Izquierdo.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Derecho.GetRange(0, Lista_Montón_Derecho.Count));
             Lista_21_Cartas.AddRange(Lista_Montón_Centro.GetRange(0, Lista_Montón_Centro.Count));
             Lista_Montón_Izquierdo.Clear(); // Rest the 3 piles.
             Lista_Montón_Centro.Clear();
             Lista_Montón_Derecho.Clear();
             for (int Índice = 0; Índice < 21; Índice += 3) // Redo the 3 piles of 7 cards.
             {
                 Lista_Montón_Izquierdo.Add(Lista_21_Cartas[Índice]);
                 Lista_Montón_Centro.Add(Lista_21_Cartas[Índice + 1]);
                 Lista_Montón_Derecho.Add(Lista_21_Cartas[Índice + 2]);
             }
             Ronda++;
             if (Ronda <= 3)
             {
                 Índice_Reparto  = 0;
                 Picture_1.Image = Program.Matriz_Cartas_79[0];
                 Picture_2.Image = Program.Matriz_Cartas_79[0];
                 Picture_3.Image = Program.Matriz_Cartas_79[0];
                 Pintar_Progreso.Clear(Color.Transparent);
                 Picture_1.Invalidate();
                 Picture_2.Invalidate();
                 Picture_3.Invalidate();
                 Picture_Progreso.Invalidate();
                 Picture_1.Update();
                 Picture_2.Update();
                 Picture_3.Update();
                 Picture_Progreso.Update();
                 //Temporizador_Cartas_Tick(Temporizador_Cartas, EventArgs.Empty); // Start at once.
                 Temporizador_Cartas.Start();
             }
         }
         if (Ronda > 3) // Game finished after 3 rounds.
         {
             Ronda           = 0;
             Índice_Reparto  = 0;
             Picture_1.Image = Program.Matriz_Cartas_79[0];
             Picture_2.Image = Program.Matriz_Cartas_79[Lista_21_Cartas[10]]; // This is the thought card.
             Picture_3.Image = Program.Matriz_Cartas_79[0];
             Pintar_Progreso.Clear(Color.Transparent);
             Picture_1.Invalidate();
             Picture_2.Invalidate();
             Picture_3.Invalidate();
             Picture_Progreso.Invalidate();
             Picture_1.Update();
             Picture_2.Update();
             Picture_3.Update();
             Picture_Progreso.Update();
             Menú_Contextual_Mostrar_Ayuda.Enabled      = true;
             Menú_Contextual_Aleatorizar_Cartas.Enabled = true;
             SystemSounds.Asterisk.Play(); // After another click the game will be restarted.
         }
     }
     catch (Exception Excepción) { Depurador.Escribir_Excepción(Excepción != null ? Excepción.ToString() : null); Variable_Excepción_Total++; Variable_Excepción = true; }
 }