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
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;
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.
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.)
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.)
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
Para continuar ou revisar
Para ir para a próxima etapa do tutorial, consulte Etapa 4: Adicionar o método CheckTheAnswer().
Para retornar para a etapa anterior do tutorial, consulte Etapa 2: Criar um problema de adição aleatório.