Compartilhar via


Etapa 6: Adicionar um Timer

Em seguida, você deve adicionar um timer ao jogo correspondente.

Para adicionar um timer.

  1. Vá para a caixa de ferramentas no Windows Forms Designer.Clique duas vezes em Timer (na componentes categoria) e adicione um timer ao formulário, com seu ícone que aparece em uma caixa cinza abaixo do formulário, conforme mostrado na figura a seguir.

    Timer

    Timer

  2. Clique no timer1 ícone para selecionar o timer.Definir o intervalo propriedade 750, mas deixe o Enabled propriedade definida como False.O intervalo propriedade instrui o timer de tempo de espera entre pulsos, para que isso faz com que o temporizador de espera de três quartos do segundo (750 milissegundos) antes de ele aciona seu primeiro evento Tick.Você não deseja que o timer para iniciar quando o programa é iniciado.Nesse caso, use o Start() método para iniciar o cronômetro quando o player clica no segundo rótulo.

  3. Clique duas vezes o Timer o ícone de controle no Windows Forms Designer para adicionar o manipulador de eventos Tick, conforme mostrado no código a seguir.

    ''' <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>
    ''' <remarks></remarks>
    Private Sub Timer1_Tick() Handles Timer1.Tick
    
        ' 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 = Nothing
        secondClicked = Nothing
    
    End Sub
    
    /// <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 Tick faz três coisas: primeiro, ele interrompe o timer, chamando o Stop() método.Em seguida, ele usa as duas variáveis de referência, firstClicked e secondClicked, para levar os dois rótulos que o player é clicado e tornar seus ícones invisível novamente.Finalmente, ele redefine a firstClicked e secondClicked fazer referência a variáveis para null no Visual C# e Nothing em Visual Basic.Isso é importante, pois é como o programa redefine ele mesmo.Agora ele é não o acompanhamento de qualquer rótulo controles e ele á pronto para o primeiro de clique do player de novamente.

    ObservaçãoObservação

    A Timer o objeto tem um Start() método que inicia o timer, e um Stop() método que interrompe a ele.Quando você configura o temporizador Enabled propriedade para True na Propriedades janela, ele inicia o acionamento assim que o programa começa.Mas quando você abandona define-o como False, ele não é iniciado um tique-taque até sua Start() método é chamado.

    ObservaçãoObservação

    Normalmente, um timer dispara seu evento Tick repetidamente, usando o intervalo propriedade para determinar quantos milissegundos de espera entre as escalas.Você deve ter notado como o temporizador Stop() método é chamado dentro do evento Tick.Que coloca o timer em um modo de instantâneo, de modo que quando o Start() método é chamado, ele aguarda o seu intervalo e dispara um único evento Tick.

  4. Para ver o novo temporizador em ação, vá para o editor de código e adicione o seguinte código na parte superior e inferior da label_Click() método manipulador de eventos.(Você está adicionando um if à parte superior e três instruções para a parte inferior; o restante do método permanece o mesmo.)

    ''' <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
    
        ' 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 Then Exit Sub
    
        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
    
            ' If the player gets this far, the timer isn't 
            ' running and firstClicked isn't Nothing, 
            ' 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()
        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)
    {
        // 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 na parte superior do método verifica se o temporizador foi iniciado, verificando a Enabled propriedade.Dessa forma, se o player clicar na primeira e segunda rótulo controles e o timer é iniciado, clicar em um terceiro controle não fará nada.

    O código na parte inferior dos conjuntos de método de secondClicked fazer referência a variável para que ele mantém rastro de segunda rótulo que o player é clicado, e ele define a cor do ícone do rótulo que preto para torná-lo visível do controle.Em seguida, ele inicia o timer no modo de um instantâneo, para que ele aguarda 750 milissegundos e dispara o evento Tick.Manipulador de eventos Tick do timer oculta os dois ícones e redefine o firstClicked e secondClicked variáveis de referência para que o formulário está pronto para o player em outro ícone.

  5. Salve e execute o programa.Clique em um ícone, e se torna visível.

  6. Clique em outro ícone.Ele aparece rapidamente, e ambos os ícones desaparecem.Repita isso várias vezes.O formulário agora mantém o controle dos ícones de primeiro e segundo que você clicar e usa o timer para fazer uma pausa antes de fazer com que os ícones desaparecem.

Para continuar ou revisar