Krok 3. Dodawanie czasomierza odliczania
W trzeciej części tego samouczka dodasz licznik czasu, aby śledzić liczbę sekund, które pozostają uczestnikowi quizu do zakończenia.
[!UWAGA]
Ten temat jest częścią serii samouczków na temat podstawowych pojęć kodowania.Aby uzyskać przegląd samouczka, zobacz Samouczek 2: Utworzenie kwizu matematycznego z limitem czasu.
Aby dodać minutnik
Dodaj zmienną w postaci liczy całkowitej o nazwie timeLeft, podobnie jak w poprzedniej procedurze.Kod powinien wyglądać następująco.
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;
Teraz potrzebujesz metody, która faktycznie zlicza sekundy, takiej jak timer, który wywołuje zdarzenie po upływie określonego czasu.
W oknie projektu, przenieś formant Timer z kategorii Składniki przybornika do formularza.
Ten formant jest widoczny w szarym obszarze w dolnej części okna projektu.
W formularzu wybierz właśnie dodaną ikonę timer1 i ustaw jej właściwość Interwał na 1000.
Ponieważ wartość interwału jest w milisekundach, wartość 1000 powoduje, że zdarzenie Tick jest inicjowane co sekundę.
W formularzu kliknij dwukrotnie formant Timer lub wybierz go, a następnie naciśnij klawisz Enter.
Pojawi się edytor kodu i wyświetli metodę dla programu obsługi zdarzenia Tick, który właśnie został dodany.
Dodaj następujące instrukcje do nowej metody obsługi zdarzeń.
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; } }
W oparciu o elementy dodane przez Ciebie czasomierz sprawdza co sekundę, czy czas się skończył się, poprzez ustalenie, czy zmienna w postaci liczby całkowitej timeLeft jest większa od 0.Jeśli tak, ciągle jest jeszcze czas.Timer najpierw odejmuje 1 od timeLeft, a następnie aktualizuje właściwość Text formantu timeLabel, aby pokazać uczestnikowi quizu, ile sekund pozostało.
Jeżeli czas się skończy, timer się zatrzyma i zmieni tekst kontrolki timeLabel tak, aby pokazywał Koniec czasu! Okno komunikatu informuje, że quiz się skończył, i odpowiedź jest odsłonięta — w tym przypadku, przez dodanie elementów addend1 i addend2.Właściwość Enabled formantu startButton została ustawiona na true, tak aby uczestnik mógł uruchomić kolejny quiz.
Właśnie dodałeś instrukcję if else, która mówi programom, jak mają podejmować decyzje.Instrukcja if else wygląda następująco.
[!UWAGA]
Poniższy przykład służy tylko do celów ilustracji – nie dodawaj go do swojego projektu.
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. }
Dokładnie przeczytaj instrukcję dodaną w bloku else, aby wyświetlić odpowiedź na problem dodawania.
sum.Value = addend1 + addend2
sum.Value = addend1 + addend2;
Instrukcja addend1 + addend2 dodaje do siebie wartości w dwóch zmiennych.Pierwsza część (sum.Value) używa właściwości Wartość sumy formantu NumericUpDown, aby wyświetlić poprawną odpowiedź.Użyj później tej samej właściwości, aby sprawdzić odpowiedzi do quizu.
Uczestnicy quizu mogą łatwiej wpisywać liczby przy użyciu formantu NumericUpDown, dlatego używasz takiego formantu do odpowiedzi na problemy matematyczne.Wszystkie potencjalne odpowiedzi są liczbami całkowitymi z zakresu od 0 do 100.Pozostawiając wartości domyślne we właściwościach Minimum, Maximum i DecimalPlaces, można zapewnić, że osoby wypełniające quiz nie mogą wprowadzić miejsc po przecinku, liczb ujemnych ani liczb, które są zbyt wysokie. (Jeśli chcesz umożliwić uczestnikom quizu wprowadzanie wartości 3,141, ale nie 3.1415, ustaw właściwość DecimalPlaces na 3).
Dodaj trzy wiersze na końcu metody StartTheQuiz(), tak aby kod wyglądał następująco.
''' <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(); }
Teraz, kiedy quiz się rozpoczyna, zmienna timeLeft jest ustawiona na 30, a właściwość Text formantu timeLabel jest ustawiona na 30 sekund.Następnie metoda Start() formantu Timer zaczyna odliczanie do zera. (Quiz nie sprawdza odpowiedzi jeszcze — to przychodzi dalej).
Zapisz swój program, uruchom go, a następnie wybierz przycisk Start na formularzu.
Timer rozpoczyna odliczanie czasu do zera.Po upłynięciu czasu quiz się kończy i pojawia się odpowiedź.Na poniższej ilustracji przedstawiono quiz w toku.
Quiz matematyczny w toku
Aby kontynuować lub przeglądnąć
Aby przejść do kolejnego kroku samouczka, zobacz Krok 4. Dodawanie metody CheckTheAnswer().
Aby powrócić do poprzedniego kroku samouczka, zobacz Krok 2. Utworzenie problemu losowego dodawania.