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; } }