Partilhar via


Etapa 3: Adicionar um Timer de contagem regressiva

Como este é um teste com tempo, você irá adicionar um timer de contagem regressiva.Seu programa precisa controlar o número de segundos para a esquerda conforme o andamento do jogo.

Para adicionar um timer de contagem regressiva

  1. Adicionar um int (inteiro) chamado timeLeft, como você fez anteriormente.Seu código deve ter a seguinte aparência.

    Public Class Form1
    
        ' Create a Random object to generate random numbers.
        Private randomizer As New Random
    
        ' These Integers will store the numbers
        ' for the addition problem.
        Private addend1 As Integer
        Private addend2 As Integer
    
        ' This Integer will keep track of the time left.
        Private timeLeft As Integer
    
    public partial class Form1 : Form
    {
        // Create a Random object to generate random numbers.
        Random randomizer = new Random();
    
        // These ints will store the numbers
        // for the addition problem.
        int addend1;
        int addend2;
    
        // This int will keep track of the time left.
        int timeLeft;
    
  2. Agora você precisa de algo que realmente faz a contagem, como, por exemplo, um timer.Vá para o Windows Forms Designer e arraste uma Timer o controle da caixa de ferramentas (da componentes categoria) ao seu formulário.Ele será exibido na área cinza na parte inferior do Designer de formulários do Windows.

  3. Clique no timer1 ícone recém-adicionado e definir o intervalo propriedade para 1000.Isso faz com que o evento Tick acionar a cada segundo.Em seguida, clique duas vezes no ícone para adicionar o manipulador de eventos Tick.O IDE alterna para o editor de código e vai para o novo método de manipulador de eventos.Adicione as seguintes instruções.

    Private Sub Timer1_Tick() Handles Timer1.Tick
    
        If timeLeft > 0 Then
            ' Display the new time left
            ' by updating the Time Left label.
            timeLeft -= 1
            timeLabel.Text = timeLeft & " seconds"
        Else
            ' If the user ran out of time, stop the timer, show
            ' a MessageBox, and fill in the answers.
            Timer1.Stop()
            timeLabel.Text = "Time's up!"
            MessageBox.Show("You didn't finish in time.", "Sorry")
            sum.Value = addend1 + addend2
            startButton.Enabled = True
        End If
    
    End Sub
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (timeLeft > 0)
        {
            // Display the new time left
            // by updating the Time Left label.
            timeLeft = timeLeft - 1;
            timeLabel.Text = timeLeft + " seconds";
        }
        else
        {
            // If the user ran out of time, stop the timer, show
            // a MessageBox, and fill in the answers.
            timer1.Stop();
            timeLabel.Text = "Time's up!";
            MessageBox.Show("You didn't finish in time.", "Sorry");
            sum.Value = addend1 + addend2;
            startButton.Enabled = true;
        }
    }
    

    Com base no que você adicionou, cada segundo o timer verifica se tempo acabou, verificando se o timeLeft int (inteiro) é maior que 0.Se for, há tempo para a esquerda.Pela primeira vez o timer subtrai 1 do timeLeft e, em seguida, em seguida, ele atualiza o timeLabel controle texto propriedade para mostrar ao usuário quantos segundos são deixados.

    Se não houver nenhum tempo restante, o cronômetro pára e altera o timeLabel para que ele mostre o texto de controle up do tempo! Uma caixa de mensagem é exibida informando ao usuário que o teste está acima.A resposta é revelada — nesse caso, adicionando addend1 e addend2.O startButton controle Enabled propriedade estiver definida como true, para disponibilizar o botão novamente.Dessa forma, o usuário pode iniciar o teste novamente.

    Você acabou de adicionar um if else instrução, que você informa programas para tomar decisões.Um if else instrução parece com o seguinte.

    If (something your program will check) Then
        ' statements that will get executed
        ' if the thing that the program checked is true 
    Else
        ' statements that will get executed
        ' if the thing that the program checked is NOT true
    End If
    
    if (something your program will check)
    {
        // statements that will get executed
        // if the thing that the program checked is true 
    }
    else
    {
        // statements that will get executed
        // if the thing that the program checked is NOT true
    }
    

    Vejamos mais detalhadamente a instrução que você adicionou no bloco else para mostrar a resposta para o problema de adição.

    sum.Value = addend1 + addend2
    
    sum.Value = addend1 + addend2;
    

    Como você provavelmente sabe, addend1 + addend2 adiciona dois valores juntos.A primeira parte (sum.Value) usa o valor propriedade da NumericUpDown controle para exibir a resposta correta.O valor propriedade também é usada mais tarde, quando você deseja verificar as respostas para o teste.

    A NumericUpDown controle torna mais fácil para os usuários digitem números, o motivo pelo qual você usa o controle para as respostas para os problemas de matemática.Como todas as respostas são números de 0 a 100, você deixe o padrão mínimo e máximo propriedades definidas como 0 e 100.Isso faz com que o controle apenas permitir que um usuário digitar um número de 0 a 100.Porque as respostas só podem ser números inteiros, se você deixar o CasasDecimais propriedade definida como 0, o que significa que o usuário não pode inserir números decimais.(Se você quiser permitir que o usuário insira 3,141, mas não 3.1415, você poderia definir a CasasDecimais propriedade para 3.)

  4. Adicionar três linhas para o fim da StartTheQuiz() método, portanto, o código é semelhante ao seguinte.

    ''' <summary>
    ''' Start the quiz by filling in all of the problems
    ''' and starting the timer.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub StartTheQuiz()
    
        ' Fill in the addition problem.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
        plusLeftLabel.Text = addend1.ToString()
        plusRightLabel.Text = addend2.ToString()
        sum.Value = 0
    
        ' Start the timer.
        timeLeft = 30
        timeLabel.Text = "30 seconds"
        Timer1.Start()
    
    End Sub
    
    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
        sum.Value = 0;
    
        // Start the timer.
        timeLeft = 30;
        timeLabel.Text = "30 seconds"; 
        timer1.Start();
    }
    

    Agora, quando o teste é iniciado, ele define o timeLeft int (inteiro) 30 e alterações a timeLabel controle texto propriedade para 30 segundos.Em seguida, ele chama o Timer do controle Start() método para iniciar a contagem regressiva.(Ele não verifica a resposta ainda — que é o próximo passo.)

  5. Salve e execute o programa.Quando você clica no Iniciar botão, o temporizador deve começar a contagem regressiva.Quando o tempo se esgotar, as extremidades de teste, e a resposta aparece.A figura abaixo mostra o teste em andamento.

    Teste de matemática em andamento

    Teste de matemática em andamento

Para continuar ou revisar