Étape 3 : ajouter un temporisateur
Comme il s'agit d'un questionnaire chronométré, vous allez ajouter un temporisateur.Votre programme doit suivre le nombre de secondes restantes tout au long de la partie.
Pour ajouter un temporisateur
Ajoutez un int (Integer) appelé timeLeft, comme vous l'avez fait précédemment.Votre code doit ressembler à ce qui suit.
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;
Vous avez maintenant besoin d'un élément chargé d'effectuer le compte à rebours, comme une minuterie.Ouvrez le Concepteur Windows Forms et faites glisser un contrôle Timer de la Boîte à outils (dans la catégorie Composants) à votre formulaire.Il s'affichera dans la zone grise en bas du Concepteur Windows Forms.
Cliquez sur l'icône timer1 que vous venez d'ajouter et affectez la valeur 1000 à la propriété Interval.Ainsi, l'événement Tick se déclenchera chaque seconde.Ensuite, double-cliquez sur l'icône pour ajouter le gestionnaire d'événements Tick.L'IDE bascule vers l'éditeur de code et accède directement à la nouvelle méthode du gestionnaire d'événements.Ajoutez les instructions suivantes.
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; } }
Suite à ce que vous avez ajouté, la minuterie analyse à chaque seconde si le temps est écoulé en vérifiant si l'int (Integer) timeLeft est supérieur à 0.Si c'est le cas, il reste encore du temps.Tout d'abord, la minuterie soustrait 1 à timeLeft, puis met à jour la propriétéText du contrôle timeLabel pour indiquer à l'utilisateur le nombre de secondes restantes.
Si le temps est écoulé, la minuterie s'arrête et modifie le texte du contrôle timeLabel pour qu'il affiche Temps écoulé ! Une boîte de message s'affiche pour indiquer à l'utilisateur que le questionnaire est terminé.La réponse apparaît (ici, en ajoutant addend1 et addend2).La valeur True est affectée à la propriété Enabled du contrôle startButton pour que le bouton soit à nouveau disponible.Ainsi, l'utilisateur peut recommencer le questionnaire.
Vous venez d'ajouter une instruction if else qui permet à vos programmes de prendre des décisions.Une instruction if else se présente comme suit.
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 }
Examinez attentivement l'instruction que vous avez ajoutée dans l'autre bloc pour afficher la réponse au problème d'addition.
sum.Value = addend1 + addend2
sum.Value = addend1 + addend2;
Comme vous le savez, addend1 + addend2 ajoute les deux valeurs.La première partie (sum.Value) utilise la propriété Value du contrôle NumericUpDown pour afficher la réponse correcte.La propriété Value est réutilisée plus tard, lorsque vous voulez vérifier les réponses du questionnaire.
Un contrôle NumericUpDown permet aux utilisateurs d'entrer des nombres facilement : vous l'utilisez ici pour les réponses aux problèmes mathématiques.Étant donné que toutes les réponses sont des nombres compris entre 0 et 100, vous ne devez pas modifier les valeurs 0 et 100 par défaut des propriétés Minimum et Maximal.Ainsi, le contrôle autorisera l'utilisateur à entrer uniquement un nombre compris entre 0 et 100.Étant donné que les réponses ne peuvent être que des nombres entiers, vous ne devez pas modifier la valeur 0 par défaut de la propriété DecimalPlaces (ce qui empêche l'utilisateur d'entrer des décimales).(Si vous vouliez permettre à l'utilisateur d'entrer 3,141 mais pas 3,1415, vous devriez affecter la valeur 3 à la propriété DecimalPlaces.)
Ajoutez trois lignes à la fin de la méthode StartTheQuiz(), pour que votre code ressemble à celui ci-dessous.
''' <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(); }
Maintenant, lorsque votre questionnaire démarre, il affecte la valeur 30 à l'int (Integer) timeLeft et modifie la propriété Text du contrôle timeLabel à 30 secondes.Il appelle ensuite la méthode Start() du contrôle Timer pour lancer le compte à rebours.(Il ne vérifie pas encore la réponse : cette action est effectuée plus tard.)
Enregistrez et exécutez votre programme.Lorsque vous cliquez sur le bouton Démarrer, la minuterie doit commencer le compte à rebours.Lorsque le temps est écoulé, le questionnaire se termine et la réponse s'affiche.L'image suivante montre le questionnaire en cours d'exécution.
Questionnaire de mathématiques en cours d'exécution
Pour continuer ou examiner
Pour passer à l'étape suivante du didacticiel, consultez Étape 4 : ajouter la méthode CheckTheAnswer().
Pour revenir à l'étape précédente du didacticiel, consultez Étape 2 : créer un problème d'addition aléatoire.