Etapa 3: Adicionar um temporizador de contagem regressiva
Na terceira parte deste tutorial, você adicionará um timer de contagem regressiva para controlar o número de segundos restantes até o término do teste.
Observação |
---|
Esse tópico faz parte de uma série de tutoriais sobre conceitos de codificação básica.Para obter uma visão geral do tutorial, consulte Tutorial 2: Criar um teste de matemática com cronômetro. |
Para adicionar um timer de contagem regressiva
Adicione uma variável inteira chamada timeLeft, exatamente como você fez no procedimento anterior.Seu código deve se parecer com o seguinte.
Public Class Form1 ' Create a Random object called randomizer ' to generate random numbers. Private randomizer As New Random ' These integer variables store the numbers ' for the addition problem. Private addend1 As Integer Private addend2 As Integer ' This integer variable keeps track of the ' remaining time. Private timeLeft As Integer
public partial class Form1 : Form { // Create a Random object called randomizer // to generate random numbers. Random randomizer = new Random(); // These integer variables store the numbers // for the addition problem. int addend1; int addend2; // This integer variable keeps track of the // remaining time. int timeLeft;
Agora você precisa de um método que realmente conte os segundos, assim como um timer, que gera um evento após a quantidade de tempo que você especificar.
Na janela de design, mova um controle de Timer de categoria de Componentes da caixa de ferramentas para seu formulário.
O controle aparece na área cinza na parte inferior da janela de design.
No formulário, escolha o ícone timer1 que você acabou de adicionar, e defina sua propriedade de Intervalo para 1000.
Como o valor do intervalo é milissegundos, um valor de 1000 fará com que o evento de escala seja acionado a cada segundo.
No formulário, clique duas vezes no controle de timer, ou selecione-o e pressione a tecla Enter.
O editor de códigos aparece e exibe o método para a marcação que o manipulador de eventos que você adicionou.
Adicione as seguintes instruções ao novo método do manipulador de eventos.
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, o timer verificará cada segundo se o tempo limite tiver sido excedido determinando se a variável timeLeft é maior que 0.Se for, o tempo ainda permanece.Primeiro o temporizador subtrai 1 do timeLeft e atualiza a propriedade Texto do controle timeLabel para exibir o comprador de teste quantos segundos restam.
Se nenhuma hora permanecer, o timer para e altera o texto do controle de timeLabel de modo que mostre Tempo esgotado! Uma caixa de mensagem informa que o teste acabou, e a resposta é revelada, nesse caso, adicionando addend1 e addend2.A propriedade Habilitado do controle de startButton está definida como true de modo que o comprador de teste possa começar outro teste.
Você adicionou uma instrução de if else, que é como você informa os programas a tomar decisões.Uma instrução de if else se parece com o seguinte.
Observação O exemplo a seguir é somente para ilustração - não o adicione a seu projeto.
If (something that your program will check) Then ' One or more statements that will run ' if what the program checked is true. Else ' One or more statements that will run ' if what the program checked is false. End If
if (something that your program will check) { // One or more statements that will run // if what the program checked is true. } else { // One or more statements that will run // if what the program checked is false. }
Examine atenciosamente a instrução que você adicionou no bloco de else para mostrar a resposta ao problema de adição.
sum.Value = addend1 + addend2
sum.Value = addend1 + addend2;
A instrução addend1 + addend2 adiciona os valores em duas variáveis juntas.A primeira parte (sum.Value) usa a propriedade Valor do controle da soma NumericUpDown para exibir a resposta correta.Você usa a mesma propriedade posteriormente para verificar as respostas para o teste.
Os participantes de teste podem inserir números mais facilmente usando um controle NumericUpDown, que é o motivo pelo qual você usa um para os problemas matemáticos.Todas as respostas possíveis são números inteiros de 0 a 100.Deixando os valores padrão das propriedades de Mínimo, de Máximo, e de DecimalPlaces, você garante que os tomadores de teste não possam inserir decimais, números negativos, ou números muito altos. (Se você quiser permitir que os tomadores de teste digitem 3,141 mas não 3,1415, você pode definir a propriedade de DecimalPlaces para 3).
Adicione três linhas ao final do método de StartTheQuiz(), para que o código se pareça com o seguinte.
''' <summary> ''' Start the quiz by filling in all of the problem ''' values and starting the timer. ''' </summary> ''' <remarks></remarks> Public Sub StartTheQuiz() ' Fill in the addition problem. ' Generate two random numbers to add. ' Store the values in the variables 'addend1' and 'addend2'. addend1 = randomizer.Next(51) addend2 = randomizer.Next(51) ' Convert the two randomly generated numbers ' into strings so that they can be displayed ' in the label controls. plusLeftLabel.Text = addend1.ToString() plusRightLabel.Text = addend2.ToString() ' 'sum' is the name of the NumericUpDown control. ' This step makes sure its value is zero before ' adding any values to it. 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 problem /// values and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. // Generate two random numbers to add. // Store the values in the variables 'addend1' and 'addend2'. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); // Convert the two randomly generated numbers // into strings so that they can be displayed // in the label controls. plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); // 'sum' is the name of the NumericUpDown control. // This step makes sure its value is zero before // adding any values to it. sum.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start(); }
Agora, quando seu teste for iniciado, a variável de timeLeft será definida para 30 e a propriedade de Texto do controle de timeLabel será definida para 30 segundos.O método de Start() de controle do Temporizador inicia a contagem regressiva. (O teste não verifica a resposta ainda, isso acontece em seguida.)
Salvar seu programa, execute-o e então escolha o botão Iniciar no formulário.
O temporizador inicia a contagem regressiva.Quando o tempo se esgota, o teste termina e a resposta aparece.A ilustração a seguir mostra o teste em andamento.
Teste de matemática em andamento
Para continuar ou revisar
Para ir para a próxima etapa do tutorial, consulte Etapa 4: Adicionar o método CheckTheAnswer().
Para retornar à etapa anterior do tutorial, consulte Etapa 2: Criar um problema de adição aleatório.