Étape 6 : ajouter une minuterie
Ensuite, ajoutez une minuterie au jeu de combinaisons.
Pour ajouter une minuterie
Allez dans la Boîte à outils du Concepteur Windows Forms.Double-cliquez sur Minuterie dans la catégorie Composants et ajoutez une minuterie au formulaire (son icône s'affiche dans une zone grise au-dessous du formulaire, comme indiqué dans l'image suivante).
Minuterie
Cliquez sur l'icône timer1 pour sélectionner la minuterie.Affectez la valeur 750 à la propriété Interval, mais ne modifiez pas la valeur False du jeu de propriétés Enabled.La propriété Interval indique à la minuterie le temps d'attente entre les battements d'horloge. Cette valeur indique donc à la minuterie qu'elle doit attendre trois quarts de seconde (750 millisecondes) avant de déclencher son premier événement Tick.Vous ne voulez pas que la minuterie démarre en même temps que le programme.À la place, utilisez la méthode Start() pour démarrer la minuterie lorsque le joueur clique sur le deuxième contrôle Label.
Double-cliquez sur l'icône du contrôle Timer dans le Concepteur Windows Forms pour ajouter le gestionnaire d'événements Tick, comme indiqué dans le code suivant.
''' <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; }
Le gestionnaire d'événements Tick effectue trois opérations : tout d'abord, il arrête la minuterie en appelant la méthode Stop().Ensuite, il utilise les deux variables de référence, firstClicked et secondClicked, pour sélectionner les deux contrôles Label sur lesquels le joueur a cliqué et masquer à nouveau leurs icônes.Enfin, il réinitialise les variables de référence firstClicked et secondClicked à la valeur null en Visual C# et Nothing en Visual Basic.Cette opération est importante car elle permet au programme de se réinitialiser.Maintenant que le programme ne suit plus aucun contrôle Label, il est de nouveau prêt pour le premier clic du joueur.
[!REMARQUE]
Un objet Timer a une méthode Start() qui démarre la minuterie et une méthode Stop() qui l'arrête.Lorsque vous affectez la valeur True à la propriété Enabled de la minuterie dans la fenêtre Propriétés, elle commence à égrener les secondes dès que le programme démarre.Mais si vous ne modifiez pas la valeur False, la minuterie attend que sa méthode Start() soit appelée pour commencer à égrener les secondes.
[!REMARQUE]
Normalement, une minuterie déclenche sans cesse son événement Tick à l'aide de la propriété Interval pour déterminer le temps d'attente en millisecondes entre les battements d'horloge.Vous aurez éventuellement remarqué que la méthode Stop() de la minuterie est appelée dans l'événement Tick.La minuterie passe ainsi en mode déclenchement unique pour attendre son intervalle et déclencher un seul événement Tick lorsque la méthode Start() est appelée.
Pour voir la nouvelle minuterie en action, allez dans l'éditeur de code et ajoutez le code suivant en haut et en bas de la méthode du gestionnaire d'événements label_Click().(Ajoutez une instruction if en haut et trois instructions en bas ; le reste de la méthode ne change pas.)
''' <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(); } }
Le code en haut de la méthode contrôle si la minuterie a été démarrée en vérifiant la propriété Enabled.Ainsi, rien ne se passera si le joueur clique sur un troisième contrôle Label après avoir cliqué sur les premier et deuxième contrôles.
Le code en bas de la méthode indique à la variable de référence secondClicked qu'elle doit effectuer le suivi du deuxième contrôle Label sur lequel le joueur a cliqué et changer la couleur de l'icône de ce contrôle en noir pour le rendre visible.Elle démarre ensuite la minuterie en mode déclenchement unique et attend 750 millisecondes avant de déclencher l'événement Tick.Le gestionnaire d'événements Tick de la minuterie masque ensuite les deux icônes et réinitialise les variables de référence firstClicked et secondClicked pour que le joueur puisse cliquer sur une autre icône dans le formulaire.
Enregistrez et exécutez votre programme.Cliquez sur une icône et elle devient visible.
Cliquez sur une autre icône.Elle s'affiche brièvement, puis les deux icônes disparaissent.Répétez cette opération plusieurs fois.Le formulaire effectue maintenant le suivi des première et deuxième icônes sur lesquelles vous cliquez et utilise la minuterie pour mettre le jeu en pause avant de masquer les icônes.
Pour continuer ou examiner
Pour passer à l'étape suivante du didacticiel, consultez Étape 7 : garder les paires visibles.
Pour revenir à l'étape précédente du didacticiel, consultez Étape 5 : ajouter des références de contrôles Label.