Tutorial: Exibir uma mensagem no aplicativo WinForms do jogo de correspondência
Nesta série de quatro tutoriais, você cria um jogo da memória em que o jogador encontra pares de ícones ocultos.
Neste tutorial, você revisará seu Jogo de Correspondência para manter os pares correspondentes visíveis e exibir uma mensagem de parabéns quando um jogador ganhar.
Neste tutorial, você aprenderá como:
- Manter os pares visíveis.
- Verificar se um jogador ganhou.
- Experimentar outros recursos.
Pré-requisitos
Este tutorial se baseia nestes tutoriais anteriores:
- Criar um aplicativo de jogo da memória
- Adicionar ícones ao seu jogo da memória
- Adicionar um temporizador no seu jogo da memória
Manter os pares visíveis
Quando um jogador corresponde um par, o jogo deve ser redefinido para que ele não acompanhe mais os rótulos que usam as variáveis de referência firstClicked
e secondClicked
.
Ele não deve redefinir as cores para os dois rótulos que foram correspondidos.
Esses rótulos continuam a ser exibidos.
- Adicione a instrução
if
a seguir ao método do manipulador de eventoslabel_Click()
. Coloque-o perto do final do código logo acima da instrução em que você inicia o 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();
}
}
Importante
Use o controle da linguagem de programação no canto superior direito desta página para exibir os snippets de código C# ou do Visual Basic.
A instrução if
verifica se o ícone no primeiro rótulo que o jogador escolhe é igual ao ícone no segundo rótulo.
Se os ícones forem iguais, o programa executará suas três instruções.
As duas primeiras instruções redefinem as variáveis de referência firstClicked
e secondClicked
.
Eles não acompanham mais nenhum dos rótulos.
A terceira instrução é uma instrução return
, que ignora o restante das instruções no método sem executá-las.
- Execute o programa e, em seguida, comece a escolher os quadrados no formulário.
Se você escolher um par que não corresponda, o evento Tick do temporizador será disparado. Ambos os ícones desaparecem.
Se você escolher um par correspondente, a nova instrução if
será executada.
A instrução return faz com que o método ignore o código que inicia o temporizador.
Os ícones permanecem visíveis.
Verificar se um jogador ganhou
Você criou um jogo divertido. Depois que um jogador ganhar, o jogo deverá terminar. Esta seção adiciona um método para verificar se o jogador ganhou.
- Adicione um método
CheckForWinner()
à parte inferior do código, abaixo do manipulador 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();
}
O método usa outro loop foreach
no C# ou o loop For Each
no Visual Basic para percorrer cada rótulo no TableLayoutPanel.
Ele verifica a cor do ícone de cada rótulo para verificar se ele corresponde à tela de fundo.
Se as cores forem iguais, o ícone permanecerá invisível e o jogador não combinou todos os ícones restantes.
Nesse caso, o programa usa uma instrução return
para ignorar o restante do método.
Se o loop passar por todos os rótulos sem executar a instrução return
, isso significa que todos os ícones no formulário foram combinados.
O programa mostra uma MessageBox para parabenizar o jogador ganhador e, em seguida, chama o método Close()
para encerrar o jogo.
- Em seguida, o manipulador de eventos Click do rótulo chama o novo 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;
}
Verifique se seu programa busca um ganhador imediatamente depois que ele mostra o segundo ícone que o jogador escolhe. Procure a linha onde você define a cor do segundo ícone escolhido e chame o método CheckForWinner()
logo depois dessa linha.
Salve e execute o programa. Jogue o jogo e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabéns.
Depois de selecionar OK, o Jogo de Correspondência é fechado.
Experimentar outros recursos
Seu Jogo de Correspondência está completo. Você pode adicionar mais recursos para tornar este jogo mais desafiador e interessante. Aqui estão algumas opções.
Substitua os ícones e as cores pelos de sua preferência.
Tente observar a propriedade ForeColor do rótulo.
Adicione um temporizador de jogo que controla em quanto tempo o jogador ganha uma partida.
Você pode adicionar um rótulo para exibir o tempo decorrido no formulário. Coloque-o acima de TableLayoutPanel. Adicione outro temporizador ao formulário para acompanhar a hora. Use código para iniciar o temporizador quando o jogador começar o jogo e para interromper o temporizador depois que os dois últimos ícones forem encontrados.
Adicione um som para quando o jogador encontrar um par, outro som para quando o jogador selecionar dois ícones que são diferentes e um terceiro som para quando o programa ocultar os ícones novamente.
Para reproduzir sons, você pode usar o namespace System.Media. Para obter mais informações, confira Reproduzir sons no aplicativo Windows Forms (C#) ou Como reproduzir áudio no Visual Basic.
Torne o jogo mais difícil aumentando o tamanho do tabuleiro.
Você precisará fazer mais do que apenas adicionar linhas e colunas ao TableLayoutPanel. Você também precisa considerar o número de ícones criados.
Torne o jogo mais desafiador ocultando o primeiro ícone se o jogador demorar muito para responder.
Próximas etapas
Parabéns! Você concluiu esta série de tutoriais. Você concluiu estas tarefas de programação e design no IDE do Visual Studio:
- Armazenou objetos, como ícones, em uma lista
- Usou um loop no C# ou no Visual Basic para iterar por meio de uma lista
- Manteve controle de estado usando variáveis de referência
- Criou um manipulador de eventos para responder a eventos para vários objetos
- Adicionou um temporizador que realiza uma contagem regressiva e dispara um evento
Avance para este artigo para um aprofundamento no Designer de Formulários do Windows.