Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Nesta série de quatro tutoriais, você constrói um jogo de correspondência, onde o jogador combina pares de ícones ocultos.
Neste tutorial, revês o teu Jogo de Pareamento para manter os pares combinados visíveis e mostrar uma mensagem de felicitações quando um jogador vencer.
Neste tutorial, você aprenderá a:
- Mantenha os pares visíveis.
- Verifique se um jogador ganhou.
- Experimente outras funcionalidades.
Pré-requisitos
Este tutorial baseia-se nestes tutoriais anteriores:
- Criar um aplicativo de jogo correspondente
- Adicione ícones ao seu jogo de correspondência
- Adicione um temporizador no seu jogo correspondente
Manter os pares visíveis
Quando um jogador constitui um par, o jogo deve reiniciar automaticamente para que deixe de registar quaisquer etiquetas que utilizem as variáveis de referência firstClicked e secondClicked.
Ele não deve repor as cores para os dois rótulos correspondidos.
Esses rótulos continuam a ser exibidos.
- Adicione a seguinte instrução
ifao método manipulador de eventoslabel_Click(). Coloque-o perto do final do código logo acima da instrução onde 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 na primeira etiqueta que o leitor escolhe é o mesmo que o ícone na segunda etiqueta.
Se os ícones forem os mesmos, o programa executa suas três instruções.
As duas primeiras instruções redefinem as variáveis de referência firstClicked e secondClicked.
Eles já não mantêm registo de nenhum dos rótulos.
A terceira instrução é uma instrução return, que ignora o resto das instruções no método sem executá-las.
- Execute o programa e, em seguida, comece a escolher quadrados no formulário.
Se escolheres um par que não corresponda, o evento Tick do temporizador será activado. 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 ganha, o jogo deve terminar. Esta secção adiciona um método para verificar se o jogador ganhou.
- Adicione um método
CheckForWinner()na 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 ciclo foreach em C# ou ciclo 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 ao plano de fundo.
Caso as cores correspondam, 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 resto 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 um MessageBox para parabenizar o jogador pela vitória e, em seguida, chama o método Close() para terminar o jogo.
- Faça com que o manipulador de eventos Click do rótulo chame 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;
}
Certifique-se de que o seu programa verifica se há um vencedor imediatamente após mostrar o segundo ícone que o jogador escolher. Procure a linha onde 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 o jogo e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabéns.
Depois de selecionar OK, o Jogo Correspondente é fechado.
Experimente outras funcionalidades
O seu Jogo de Correspondência está concluído. Você pode adicionar mais recursos para tornar este jogo mais desafiador e interessante. Aqui estão algumas opções.
Substitua os ícones e cores por aqueles que você escolher.
Tente ver a propriedade ForeColor do rótulo.
Adicione um temporizador de jogo que rastreie quanto tempo leva para o jogador ganhar.
Você pode adicionar um rótulo para exibir o tempo decorrido no formulário. Coloque-o acima do TableLayoutPanel. Adicione outro temporizador ao formulário para controlar o tempo. Use código para iniciar o temporizador quando o jogador iniciar o jogo e pare o temporizador depois de fazer corresponder os dois últimos ícones.
Adicione um som quando o jogador encontrar um par, outro som quando descobrir dois ícones que não combinam, e um terceiro som quando o programa voltar a esconder os ícones.
Para reproduzir sons, você pode usar o namespace System.Media. Para obter mais informações, consulte Reproduzir sons no aplicativo 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 escondendo o primeiro ícone se o jogador for muito lento para responder.
Próximos passos
Parabéns;! Você concluiu esta série de tutoriais. Você executou estas tarefas de programação e design no IDE do Visual Studio:
- Objetos armazenados, como ícones, em uma lista
- Usou um ciclo em C# ou Visual Basic para percorrer uma lista
- Controle de estado usando variáveis de referência
- Criado um manipulador de eventos para responder a eventos para vários objetos
- Adicionado um temporizador que conta para baixo e dispara um evento
Avance para este artigo para um mergulho profundo no Windows Forms Designer.