Tutorial: Visualización de un mensaje en la aplicación de WinForms del juego de formar parejas
En esta serie de cuatro tutoriales, construyes un juego de emparejar, donde el jugador empareja pares de iconos ocultos.
En este tutorial, revisas tu juego de emparejar para mantener visibles los pares emparejados y mostrar un mensaje de felicitación cuando un jugador gana.
En este tutorial, aprenderá a:
- Mantener visibles los pares.
- Compruebe si un jugador ha ganado.
- Pruebe otras características.
Prerrequisitos
Este tutorial se basa en estos tutoriales anteriores:
- Crear una aplicación de juego coincidente
- Incorporación de iconos al juego de formar parejas
- Incorporación de un temporizador en el juego para formar parejas
Mantener visibles los pares
Cuando un jugador coincide con un par, el juego debe restablecerse para que ya no realice un seguimiento de las etiquetas que usan las variables de referencia firstClicked
y secondClicked
.
No debe restablecer los colores de las dos etiquetas que coincidieron.
Esas etiquetas siguen mostrándose.
- Agregue la siguiente instrucción
if
al método de controlador de eventoslabel_Click()
. Colóquelo cerca del final del código justo encima de la instrucción donde se inicia el temporizador.
// If the player gets this far, the timer isn't
// running and firstClicked isn't null,
// so this must be the second icon the player clicked
// Set its color to black
secondClicked = clickedLabel;
secondClicked.ForeColor = Color.Black;
// If the player clicked two matching icons, keep them
// black and reset firstClicked and secondClicked
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
firstClicked = null;
secondClicked = null;
return;
}
// If the player gets this far, the player
// clicked two different icons, so start the
// timer (which will wait three quarters of
// a second, and then hide the icons)
timer1.Start();
}
}
La instrucción if
comprueba si el icono de la primera etiqueta que elige el jugador es el mismo que el icono de la segunda etiqueta.
Si los iconos son los mismos, el programa ejecuta sus tres instrucciones.
Las dos primeras instrucciones restablecen las variables de referencia firstClicked
y secondClicked
.
Ya no realizan un seguimiento de ninguna de las etiquetas.
La tercera instrucción es una instrucción return
, que omite el resto de las instrucciones del método sin ejecutarlas.
- Ejecute el programa y, a continuación, empiece a elegir cuadrados en el formulario.
Si elige una pareja que no coincide, se desencadena el evento Tic del temporizador. Ambos iconos desaparecen.
Si elige un par coincidente, se ejecuta la nueva instrucción if
.
La instrucción return hace que el método omita el código que inicia el temporizador.
Los iconos permanecen visibles.
Comprobar si un jugador ha ganado
Has creado un juego divertido. Después de que un jugador gana, el juego debería terminar. En esta sección se agrega un método para comprobar si el jugador ha ganado.
- Agregue un método
CheckForWinner()
a la parte inferior del código, debajo del controlador de eventostimer1_Tick()
.
/// <summary>
/// Check every icon to see if it is matched, by
/// comparing its foreground color to its background color.
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
// Go through all of the labels in the TableLayoutPanel,
// checking each one to see if its icon is matched
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// If the loop didn’t return, it didn't find
// any unmatched icons
// That means the user won. Show a message and close the form
MessageBox.Show("You matched all the icons!", "Congratulations");
Close();
}
El método usa otro bucle de foreach
en C# o bucle en For Each
en Visual Basic para recorrer cada etiqueta en el TableLayoutPanel.
Comprueba el color del icono de cada etiqueta para comprobar si coincide con el fondo.
Si los colores coinciden, el icono sigue siendo invisible y el jugador no ha hallado las parejas de los iconos restantes.
En ese caso, el programa usa una instrucción return
para omitir el resto del método.
Si el bucle recorre todas las etiquetas sin ejecutar la instrucción return
, significa que todos los iconos del formulario coinciden.
El programa muestra un elemento MessageBox para felicitar al jugador que ganó y, luego, llama al método Close()
para finalizar el juego.
- Haga que el controlador de eventos Click de la etiqueta llame al nuevo método
CheckForWinner()
.
// If the player gets this far, the timer isn't
// running and firstClicked isn't null,
// so this must be the second icon the player clicked
// Set its color to black
secondClicked = clickedLabel;
secondClicked.ForeColor = Color.Black;
// Check to see if the player won
CheckForWinner();
// If the player clicked two matching icons, keep them
// black and reset firstClicked and secondClicked
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
firstClicked = null;
secondClicked = null;
return;
}
Asegúrate de que tu programa comprueba si hay un ganador inmediatamente después de que muestre el segundo icono que elige el jugador. Busque la línea donde establezca el segundo color del icono elegido y, a continuación, llame al método CheckForWinner()
justo después de esa línea.
Guarde y ejecute el programa. Juega al juego y haz coincidir todos los iconos. Cuando gana, el programa muestra un mensaje de felicitación.
Una vez que selecciona Aceptar, se cierra el juego de formar parejas.
Prueba de otras características
El juego de formar parejas se completó. Puedes agregar más características para hacer que este juego sea más difícil e interesante. Estas son algunas opciones.
Reemplace los iconos y colores por los que elija.
Observe la propiedad ForeColor de la etiqueta.
Agrega un temporizador de juego que realiza un seguimiento de cuánto tiempo tarda el jugador en ganar.
Puede agregar una etiqueta para mostrar el tiempo transcurrido en el formulario. Colóquela sobre TableLayoutPanel. Agregue otro temporizador al formulario para realizar el seguimiento de la hora. Usa código para iniciar el temporizador cuando el jugador inicia el juego y detener el temporizador después de que coincidan con los dos últimos iconos.
Agrega un sonido cuando el jugador encuentra una coincidencia, otro sonido cuando el jugador descubre dos iconos que no coinciden y un tercer sonido cuando el programa oculta los iconos de nuevo.
Para reproducir sonidos, puede usar el espacio de nombres System.Media. Para obtener más información, vea Reproducir sonidos en la aplicación de Windows Forms (C#) o Cómo reproducir audio en Visual Basic.
Haga que el juego sea más difícil haciendo que el tablero sea más grande.
Tendrá que hacer más que agregar filas y columnas a TableLayoutPanel. También debe tener en cuenta el número de iconos que cree.
Haga que el juego sea más difícil ocultando el primer icono si el jugador es demasiado lento para responder.
Pasos siguientes
¡Felicidades! Ha completado esta serie de tutoriales. Ha realizado estas tareas de programación y diseño en el IDE de Visual Studio:
- Objetos almacenados, como iconos, en una lista
- Se usa un bucle en C# o Visual Basic para recorrer en iteración una lista
- Seguimiento mantenido del estado mediante variables de referencia
- Se ha creado un controlador de eventos para responder a eventos de varios objetos
- Se ha agregado un temporizador que cuenta hacia abajo y desencadena un evento
Avance a este artículo para profundizar en el Diseñador de Windows Forms.
Tutorial de : Introducción al diseñador de Windows Forms