Tutorial: Adicionar variáveis de referência e um controle de temporizador ao aplicativo WinForms do jogo da memória
Nesta série de quatro tutoriais, você cria um jogo da memória em que o jogador encontra pares de ícones ocultos.
O programa Jogo da Memória precisa rastrear quais controles de rótulo o jogador escolhe. Depois que um jogador escolhe o primeiro rótulo, o programa deve mostrar o ícone. Depois que o segundo rótulo é escolhido, o programa deve exibir ambos os ícones por um breve momento. Em seguida, oculta os dois ícones.
Seu programa controla qual rótulo você escolheu em primeiro e segundo lugar usando variáveis de referência. Um temporizador oculta os ícones e controla por quanto tempo mostrar os ícones
- Adicionar referências de rótulo.
- Adicionar um temporizador.
Pré-requisitos
Este tutorial se baseia em tutoriais anteriores, Criar um aplicativo de jogo da memória e Adicionar ícones ao seu jogo da memória. Conclua esses tutoriais primeiro.
Adicionar referências de rótulo
Nesta seção, você adicionará duas variáveis de referência ao código. Elas controlam ou referenciam objetos Rótulo.
Adicione referências de rótulo ao seu formulário usando o código a seguir.
public partial class Form1 : Form { // firstClicked points to the first Label control // that the player clicks, but it will be null // if the player hasn't clicked a label yet Label firstClicked = null; // secondClicked points to the second Label control // that the player clicks Label secondClicked = null;
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.
Essas instruções não fazem com que os controles de rótulo apareçam no formulário, pois a palavra-chave new
não existe.
Quando o programa é iniciado, firstClicked
e secondClicked
são definidos como null
para o C# ou Nothing
para o Visual Basic.
Modifique o manipulador de eventos Click para usar a nova variável de referência
firstClicked
. Remova a última instrução no método do manipulador de eventoslabel1_Click()
(clickedLabel.ForeColor = Color.Black;
) e a substitua pela instruçãoif
a seguir./// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; // If firstClicked is null, this is the first icon // in the pair that the player clicked, // so set firstClicked to the label that the player // clicked, change its color to black, and return if (firstClicked == null) { firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; } } }
Salve e execute seu programa. Escolha um dos controles de rótulo e seu ícone é exibido. Escolha o próximo controle de rótulo e observe que nada acontece.
Somente o primeiro ícone escolhido é exibido. Os outros ícones estão invisíveis.
O programa já está rastreando o primeiro rótulo escolhido pelo jogador.
A referência firstClicked
não é null
no C# nem Nothing
no Visual Basic.
Quando a instrução if
detecta que firstClicked
não é igual a null
nem Nothing
, ela executa as instruções.
Adicionar um temporizador
O aplicativo de jogo da memória usa um controle Timer. Um temporizador aguarda e, em seguida, dispara um evento, conhecido como um tique. Um temporizador pode iniciar uma ação ou repetir uma ação regularmente.
Em seu programa, o temporizador permite que um jogador escolha dois ícones. Se os ícones não corresponderem, ele ocultará os dois ícones novamente após um curto período de tempo.
Selecione a guia Caixa de Ferramentas, na categoria Componentes, clique duas vezes ou arraste o componente Temporizador para o formulário. O ícone do temporizador, chamado timer1, aparece em um espaço abaixo do formulário.
Escolha o ícone Timer1 para selecionar o temporizador. Na janela Propriedades, selecione o botão Propriedades para exibir as propriedades.
Defina a propriedade Intervalo como 750, que é igual a 750 milissegundos.
A propriedade Intervalo informa ao temporizador quanto tempo ele deve aguardar entre os tiques, momento em que dispara o evento Tick. O programa chamará o método Start() para iniciar o temporizador depois que o jogador escolher o segundo rótulo.
Escolha o ícone de controle do temporizador e pressione Enter ou clique duas vezes no temporizador. O IDE adiciona um manipulador de eventos Tick vazio. Substitua o código pelo código seguinte.
/// <summary> /// This timer is started when the player clicks /// two icons that don't match, /// so it counts three quarters of a second /// and then turns itself off and hides both icons /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { // Stop the timer timer1.Stop(); // Hide both icons firstClicked.ForeColor = firstClicked.BackColor; secondClicked.ForeColor = secondClicked.BackColor; // Reset firstClicked and secondClicked // so the next time a label is // clicked, the program knows it's the first click firstClicked = null; secondClicked = null; }
O manipulador de eventos de Tick realiza três tarefas:
- Chamando o método Stop(), ele verifica se o temporizador não está em execução.
- Ele usa duas variáveis de referência,
firstClicked
esecondClicked
, para tornar invisíveis novamente os ícones dos dois rótulos que jogador escolheu. - Ele redefine as variáveis de referência
firstClicked
esecondClicked
comonull
no C# eNothing
no Visual Basic.
Vá para o editor de código e adicione o código no início e no fim do método do manipulador de eventos
label1_Click()
. Esse código verificará se o temporizador está habilitado, definirá a variável de referênciasecondClicked
e iniciará o temporizador. O método do manipulador de eventoslabel1_Click()
agora tem a seguinte aparência:/// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { // The timer is only on after two non-matching // icons have been shown to the player, // so ignore any clicks if the timer is running if (timer1.Enabled == true) return; Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; // If firstClicked is null, this is the first icon // in the pair that the player clicked, // so set firstClicked to the label that the player // clicked, change its color to black, and return if (firstClicked == null) { firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; } // 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 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(); } }
- O código no início do método verifica se o temporizador foi iniciado verificando o valor da propriedade Habilitado. Se o jogador escolher o primeiro e o segundo controles de Rótulo e o temporizador for iniciado, a escolha de um terceiro rótulo não terá nenhum efeito.
- O código no fim do método define a variável de referência
secondClicked
para rastrear o segundo controle de Rótulo. Em seguida, ele define a cor do ícone do rótulo como preta para torná-la visível. Em seguida, ele inicia o temporizador no modo de um único disparo, de modo que ele aguarda 750 milissegundos e dispara um único tique. O manipulador de eventos do Tick do temporizador oculta os dois ícones e redefine as variáveis de referênciafirstClicked
esecondClicked
. O formulário está pronto para o jogador escolher outro par de ícones.
Observação
Se você copiar e colar o bloco de código label1_Click()
em vez de inserir o código manualmente, não se esqueça de substituir o código label1_Click()
existente.
Caso contrário, você terá um bloco de código duplicado.
- Salve e execute seu programa. Selecione um quadrado e o ícone ficará visível. Escolha outro quadrado. O ícone aparece rapidamente e, em seguida, ambos desaparecem.
Agora seu programa rastreia o primeiro e o segundo ícones que você escolhe. Ele usa o temporizador para pausar antes de fazer os ícones desaparecerem.
Próximas etapas
Avance para o próximo tutorial para saber como concluir o Jogo da Memória.