Compartilhar via


Etapa 5: Adicionar referências de rótulo

O programa precisa rastrear quais controles de rótulo o jogador escolhe.Atualmente, o programa mostra todos os rótulos escolhidos pelo jogador.Mas isso será alterado.Depois que o primeiro rótulo é escolhido, o programa deve mostrar o ícone do rótulo.Depois que o segundo rótulo é escolhido, o programa deve exibir ambos os ícones por um breve momento e depois ocultá-los novamente.Seu programa agora rastreará qual controle de rótulo é escolhido primeiro e qual é escolhido em segundo usando variáveis de referência.

Para adicionar referências de rótulo

  1. Adicione referências de rótulo ao seu formulário usando o código a seguir.

    Public Class Form1
    
        ' firstClicked points to the first Label control  
        ' that the player clicks, but it will be Nothing  
        ' if the player hasn't clicked a label yet 
        Private firstClicked As Label = Nothing 
    
        ' secondClicked points to the second Label control  
        ' that the player clicks 
        Private secondClicked As Label = Nothing
    
    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;
    

    Essas variáveis de referência parecem semelhantes às instruções que você usou anteriormente para adicionar objetos (como os objetos Timer, List e Random) ao formulário.No entanto, essas instruções não fazem com que os dois controles de rótulo extras apareçam no formulário, pois a palavra-chave new não foi usada em nenhuma das duas instruções.Sem a palavra-chave new, nenhum objeto é criado.Por esse motivo firstClicked e secondClicked são chamadas de variáveis de referência: elas rastreiam (ou fazem referência a) os objetos Label.

    Quando uma variável não estiver rastreando um objeto, ela será definida para um valor reservado especial: null no Visual C# e Nothing no Visual Basic.Desse modo, quando o programa for iniciado, firstClicked e secondClicked serão definidas como null ou Nothing, o que significa que as variáveis não estão rastreando nada.

  2. 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 eventos label_Click() (clickedLabel.ForeColor = Color.Black;) e substitua-a pela instrução if que se segue. (Não se esqueça de incluir o comentário e a instrução if inteira.)

    ''' <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> 
    ''' <remarks></remarks> 
    Private Sub label_Click(ByVal sender As System.Object, 
                            ByVal e As System.EventArgs) Handles Label9.Click, 
        Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, 
        Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, 
        Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click
    
        Dim clickedLabel = TryCast(sender, Label)
    
        If clickedLabel IsNot Nothing Then 
    
            ' If the clicked label is black, the player clicked 
            ' an icon that's already been revealed -- 
            ' ignore the click 
            If clickedLabel.ForeColor = Color.Black Then Exit Sub 
    
            ' If firstClicked is Nothing, 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 Is Nothing Then
                firstClicked = clickedLabel
                firstClicked.ForeColor = Color.Black
                Exit Sub 
            End If 
        End If 
    
    End Sub
    
    /// <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 label_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;
            }
        }
    }
    
  3. Salve e execute seu programa.Escolha um dos controles de rótulo e seu ícone é exibido.

  4. Escolha o próximo controle de rótulo e observe que nada acontece.O programa já está rastreando o primeiro rótulo que o jogador escolheu, de modo que firstClicked não é igual a null no Visual C# ou Nothing no Visual Basic.Quando sua instrução if verifica firstClicked para determinar se ele é igual a null ou Nothing, ela descobre que não é e não executa as instruções na instrução if.Desse modo, somente o primeiro ícone que é escolhido torna-se preto e os outros ícones ficam invisíveis, conforme mostrado na imagem a seguir.

    Jogo da memória mostrando um ícone

    Jogo da memória mostrando um ícone

    Você corrigirá essa situação na próxima etapa do tutorial adicionando um controle Timer.

Para continuar ou revisar