Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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á a:
- Manter os pares visíveis.
- Verifique se um jogador ganhou.
- Experimente outros recursos.
Pré-requisitos
Este tutorial baseia-se nestes tutoriais anteriores:
- Criar um aplicativo de jogo correspondente
- Adicionar ícones ao seu jogo correspondente
- Adicionar um temporizador em seu jogo correspondente
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
ifa 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();
}
}
A instrução if verifica se o ícone no primeiro rótulo escolhido pelo player é o mesmo que o ícone no segundo rótulo.
Se os ícones forem os mesmos, 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 controlam mais nenhuma das etiquetas.
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 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 deve 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 em C# ou 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 corresponderem, o ícone permanecerá invisível, e o jogador ainda não terá correspondido a 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 correspondidos.
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 o programa verifica se há um vencedor imediatamente após ele mostrar o segundo ícone escolhido pelo jogador. Procure a linha em que você define a cor do segundo ícone escolhido e, em seguida, chame o método CheckForWinner() logo após essa linha.
Salve e execute o programa. Jogue e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabenização.

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 escolhidos.
Tente observar a propriedade ForeColor do rótulo.
Adicione um temporizador de jogo que acompanha quanto tempo leva para o jogador ganhar.
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, consulte Reproduzir sons no aplicativo do Windows Forms (C#) ou Como reproduzir áudio no Visual Basic.
Torne o jogo mais difícil, tornando o tabuleiro maior.
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 estiver muito lento para responder.
Próximas etapas
Parabéns! Você concluiu esta série de tutoriais. Você fez essas tarefas de programação e design no IDE do Visual Studio:
- Objetos armazenados, como ícones, em uma lista
- Usou um loop no C# ou no Visual Basic para iterar por meio de uma lista
- Manteve o controle do estado usando variáveis de referência
- Criou um manipulador de eventos para responder a eventos para vários objetos
- Adicionado um temporizador que faz uma contagem regressiva e dispara um evento
Avance para este artigo para obter um aprofundamento no Designer de Formulários do Windows.