Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Reihe von vier Lernprogrammen erstellen Sie ein mathematisches Quiz. Das Quiz enthält vier zufällige mathematische Probleme, die ein Quiz taker innerhalb eines bestimmten Zeitraums beantworten möchte.
Das Quiz verwendet ein Timer-Steuerelement. Der Code hinter diesem Steuerelement verfolgt die verstrichene Zeit und überprüft die Antworten des Prüfungsteilnehmers.
In diesem dritten Lernprogramm erfahren Sie, wie Sie:
- Fügen Sie ein Timer-Steuerelement hinzu.
- Fügen Sie einen Ereignishandler für den Timer hinzu.
- Schreiben Sie Code, um die Antworten des Benutzers zu überprüfen, Nachrichten anzuzeigen und die richtigen Antworten auszufüllen.
Voraussetzungen
Dieses Lernprogramm baut auf vorherigen Lernprogrammen auf, beginnend mit Erstellen einer WinForms-App für mathematische Tests. Wenn Sie diese Tutorials noch nicht abgeschlossen haben, sollten Sie sie zuerst durcharbeiten.
Hinzufügen eines Countdown-Timers
Um die Zeit während des Quiz nachzuverfolgen, verwenden Sie eine Zeitgeberkomponente. Außerdem benötigen Sie eine Variable, um den Zeitraum zu speichern, der noch übrig ist.
Fügen Sie eine ganzzahlige Variable hinzu, die timeLeft genannt wird, auf die gleiche Weise, wie Sie Variablen in früheren Tutorials deklariert haben. Setzen Sie die timeLeft Deklaration direkt hinter den anderen Deklarationen. Ihr Code sollte wie im folgenden Beispiel aussehen.
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; // These integer variables store the numbers // for the subtraction problem. int minuend; int subtrahend; // These integer variables store the numbers // for the multiplication problem. int multiplicand; int multiplier; // These integer variables store the numbers // for the division problem. int dividend; int divisor; // This integer variable keeps track of the // remaining time. int timeLeft;
Verschieben Sie in Windows Forms Designer-ein Timer-Steuerelement aus der Kategorie Komponenten der Toolbox- in Ihr Formular. Das Steuerelement wird im grauen Bereich unten im Entwurfsfenster angezeigt.
Wählen Sie im Formular das soeben hinzugefügte Timer1-Symbol aus, und legen Sie dessen Interval-Eigenschaft auf 1000fest. Da sich dieses Intervall in Millisekunden befindet, bewirkt ein Wert von 1000, dass der Timer jedes Sekunde ein Tick Ereignis auslöst.
Überprüfen der Antworten
Da der Timer jede Sekunde ein Tick-Ereignis auslöst, ist es sinnvoll, die verstrichene Zeit in einem Tick-Ereignishandler zu überprüfen. Es ist auch praktisch, die Antworten in diesem Ereignishandler zu überprüfen. Wenn die Zeit abgelaufen ist oder die Antworten korrekt sind, sollte das Quiz beendet werden.
Fügen Sie vor dem Schreiben dieses Ereignishandlers eine Methode namens CheckTheAnswer() hinzu, um zu bestimmen, ob die Antworten auf die mathematischen Probleme korrekt sind. Diese Methode sollte mit den anderen Methoden wie StartTheQuiz()in Einklang stehen. Ihr Code sollte wie im folgenden Beispiel aussehen.
/// <summary>
/// Check the answers to see if the user got everything right.
/// </summary>
/// <returns>True if the answer's correct, false otherwise.</returns>
private bool CheckTheAnswer()
{
if ((addend1 + addend2 == sum.Value)
&& (minuend - subtrahend == difference.Value)
&& (multiplicand * multiplier == product.Value)
&& (dividend / divisor == quotient.Value))
return true;
else
return false;
}
Diese Methode bestimmt die Antworten auf die mathematischen Probleme und vergleicht die Ergebnisse mit den Werten in den NumericUpDown-Steuerelementen. In diesem Code:
Die Visual Basic-Version verwendet das schlüsselwort
Functionanstelle des üblichenSubSchlüsselworts, da diese Methode einen Wert zurückgibt.Sie können das Multiplikationszeichen (×) und das Divisionszeichen (÷) nicht einfach mithilfe der Tastatur eingeben, sodass C# und Visual Basic ein Sternchen (*) für die Multiplikation und ein Schrägstrich (/) für die Division akzeptieren.
In C# ist
&&derlogical and-Operator. In Visual Basic ist der entsprechende OperatorAndAlso. Sie verwenden den operatorlogical and, um zu überprüfen, ob mehrere Bedingungen erfüllt sind. Wenn die Werte alle korrekt sind, gibt die Methode in diesem Fall einen Wert vontruezurück. Andernfalls gibt die Methode den Wertfalsezurück.Die
if-Anweisung verwendet die eigenschaft Value eines NumericUpDown-Steuerelements, um auf den aktuellen Wert des Steuerelements zuzugreifen. Im nächsten Abschnitt verwenden Sie dieselbe Eigenschaft, um die richtige Antwort in jedem Steuerelement anzuzeigen.
Hinzufügen eines Ereignishandlers zum Timer
Nachdem Sie nun eine Möglichkeit haben, die Antworten zu überprüfen, können Sie den Code für den Tick-Ereignishandler schreiben. Dieser Code wird jede Sekunde ausgeführt, nachdem der Timer ein Tick-Ereignis auslöst. Dieser Ereignishandler überprüft die Antworten des Quiz-Teilnehmers, indem CheckTheAnswer()aufgerufen wird. Außerdem wird überprüft, wie viel Zeit im Quiz verstrichen ist.
Doppelklicken Sie im Formular auf das Timer-Steuerelement, oder wählen Sie es aus, und drücken Sie dann die EINGABETASTE. Diese Aktionen fügen einen Tick-Ereignishandler hinzu. Der Code-Editor wird geöffnet und zeigt die Methode des Tick-Handlers an.
Für C# wird in der Codedatei Form1.Designer.cs eine Zeile hinzugefügt, die den Ereignishandler verknüpft.
timer1.Tick += new EventHandler(timer1_Tick);(Für Visual Basic gibt es keine Notwendigkeit für diese Zeile, aber der Ereignishandler enthält eine
handles Timer1.Tick, die dasselbe tut.)Fügen Sie der neuen Ereignishandlermethode die folgenden Anweisungen hinzu.
private void timer1_Tick(object sender, EventArgs e) { if (CheckTheAnswer()) { // If CheckTheAnswer() returns true, then the user // got the answer right. Stop the timer // and show a MessageBox. timer1.Stop(); MessageBox.Show("You got all the answers right!", "Congratulations!"); startButton.Enabled = true; } else if (timeLeft > 0) { // If CheckTheAnswer() returns false, keep counting // down. Decrease the time left by one second and // 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; difference.Value = minuend - subtrahend; product.Value = multiplicand * multiplier; quotient.Value = dividend / divisor; startButton.Enabled = true; } }
Jede Sekunde des Quiz wird mit dieser Methode ausgeführt. Der Code überprüft zuerst den Wert, der CheckTheAnswer() zurückgibt.
Wenn alle Antworten korrekt sind, ist dieser Wert
true, und das Quiz endet:- Der Timer stoppt.
- Eine Glückwunschnachricht erscheint.
- Die Enabled-Eigenschaft des startButton-Steuerelements ist auf
truefestgelegt, sodass Quizteilnehmende ein anderes Quiz beginnen können.
Wenn
CheckTheAnswer()falsezurückgibt, überprüft der Code den Wert timeLeft:- Wenn diese Variable größer als 0 ist, subtrahiert der Zeitgeber 1 von timeLeft-. Außerdem wird die Text-Eigenschaft des timeLabel-Steuerelements aktualisiert, um Quizteilnehmenden anzuzeigen, wie viele Sekunden verbleiben.
- Wenn keine Zeit bleibt, stoppt der Timer und ändert den timeLabel- Text in Time's up! Ein Meldungsfeld liest vor, dass das Quiz vorbei ist und die Antworten offengelegt werden. Die Startschaltfläche wird wieder verfügbar.
Starten des Timers
Um den Timer zu starten, wenn das Quiz beginnt, fügen Sie am Ende der StartTheQuiz()-Methode drei Zeilen hinzu, wie im folgenden Beispiel gezeigt.
/// <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;
// Fill in the subtraction problem.
minuend = randomizer.Next(1, 101);
subtrahend = randomizer.Next(1, minuend);
minusLeftLabel.Text = minuend.ToString();
minusRightLabel.Text = subtrahend.ToString();
difference.Value = 0;
// Fill in the multiplication problem.
multiplicand = randomizer.Next(2, 11);
multiplier = randomizer.Next(2, 11);
timesLeftLabel.Text = multiplicand.ToString();
timesRightLabel.Text = multiplier.ToString();
product.Value = 0;
// Fill in the division problem.
divisor = randomizer.Next(2, 11);
int temporaryQuotient = randomizer.Next(2, 11);
dividend = divisor * temporaryQuotient;
dividedLeftLabel.Text = dividend.ToString();
dividedRightLabel.Text = divisor.ToString();
quotient.Value = 0;
// Start the timer.
timeLeft = 30;
timeLabel.Text = "30 seconds";
timer1.Start();
}
Wenn Ihr Quiz gestartet wird, legt dieser Code die timeLeft- Variable auf 30 und die Text Eigenschaft des steuerelements timeLabel auf 30 Sekunden fest. Dann wird der Countdown mit der Start()-Methode des Timer-Steuerelements gestartet.
Ausführen der App
Speichern Sie Ihr Programm, und führen Sie es aus.
Klicken Sie auf Quiz starten. Der Timer beginnt, nach unten zu zählen. Wenn die Zeit abläuft, endet das Quiz, und die Antworten werden angezeigt.
Starten Sie ein weiteres Quiz, und stellen Sie die richtigen Antworten auf die mathematischen Probleme bereit. Wenn Sie innerhalb des Zeitlimits richtig antworten, wird ein Meldungsfeld geöffnet, die Startschaltfläche wird verfügbar, und der Timer wird beendet.
Nächste Schritte
Wechseln Sie zum nächsten Lernprogramm, um zu erfahren, wie Sie Ihr mathematisches Quiz anpassen.