Wir gehen nun zur Darstellung unserer nächsten Rechenaufgabe über. Wir könnten unsere einfache Additionsaufgabe direkt mit Print auf die Tafel schreiben, wählen aber zur Übung einen anderen Weg, nämlich die Aufgabe als Label darzustellen.
Dazu plazieren wir auf unserer Form ein weiteres Label, "lblAufgabe" und passen es in der Farbe der Tafel an (weiße Schrift auf schwarzem Hintergrund).
Da jetzt entweder die Kugeln und lblFrage oder lblAufgabe aktiv sein können, verallgemeinern wir unsere Routine "KugelUnsichtbar", sodaß sie für alle Fälle paßt:
Sub Unsichtbar() For i = 1 To 9 'alle roten Kugeln unsichtbar machen imgKugelX(i - 1).Visible = False Next For i = 1 To 9 'alle blauen Kugeln unsichtbar machen imgKugelY(i - 1).Visible = False Next lblAufgabe.Visible = False lblFrage.Visible = False End Sub
Wenn eine Addition ausgewählt wird, tritt folgendes Click-Ereignis ein:
Private Sub mnuAddition_Click(Index As Integer) Unsichtbar 'evtl. sichtbare Kugeln unsichtbar machen ErgebnisWert (Index) 'Zahlenbereich aus Menü-Index bestimmen Addition 'Aufruf unserer Zählübung aktiveUebung = "Addition" 'Uebung merken End Sub
Neu in diesem Click-Ereignis ist die Übergabe des Index. Zur Erinnnerung: Unser Additions-Menü hat verschiedene Zahlenbereiche (Index 0 bis 10, Index 1 bis 20, Index 2 bis 100).
Wir müssen nun zunächst prüfen, in welchem Bereich unser Ergebnis liegen soll. Da wir bei unserer nächsten Übung, der Subtraktion vor dem gleichen Problem stehen werden, lagern wir die Prüfung gleich in eine kleine Prozedur aus:
Sub ErgebnisWert(Index) Select Case Index 'Zahlenbereich aus Menü-Index bestimmen Case 0 MaxErgebnisWert = 10 MinErgebnisWert = 2 Case 1 MaxErgebnisWert = 20 MinErgebnisWert = 10 Case Else MaxErgebnisWert = 100 MinErgebnisWert = 20 End Select End Sub
MaxErgebnisWert und MinErgebnisWert sollen modulweit bekannt gemacht werden, damit wir auch im KeyPress-Ereignis damit arbeiten können:
Dim MaxErgebnisWert 'aktuelles Max-Ergebnis modulweit bekanntmachen Dim MinErgebnisWert 'aktuelles Min-Ergebnis modulweit bekanntmachen
Jetzt müssen wir noch das KeyPress-Ereignis erweitern:
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii <> vbKeyReturn Then Exit Sub 'Prüfen ob Enter gedrückt wurde, sonst ignorieren If Val(txtErgebnis.Text) = x Then MsgBox "Richtig!" Else MsgBox "Leider falsch!" End If Unsichtbar 'Kugeln und Text verschwinden lassen Select Case aktiveUebung Case "Zählen" Zaehlen 'nächste Zählübung Case "SymbAddition" SymbAddition 'nächste symb. Addition Case "Addition" Addition 'nächste Addition Case "Subtraktion" 'Code für Subtraktion Case "Multiplikation" 'Code für Multiplikation Case "Division" 'Code für Division End Select End Sub
Und natürlich müssen wir auch noch die Aufgabe selber erzeugen. Die Prozedur sieht unserer Symb. Addition sehr ähnlich, nur daß wir hier keine Kugeln sondern Zahlen darstellen müssen.
Sub Addition() summand1 = Zufallszahl(1, MaxErgebnisWert - MinErgebnisWert) 'Summand1 x = Zufallszahl(MinErgebnisWert, MaxErgebnisWert) 'Ergebnis Select Case x 'prüfen, ob Ergebnis vernünftig ist Case Is < summand1 'negativ summand2 = x 'Summanden vertauschen x = summand1 summand1 = x - summand2 Case Is = summand1 x = x + 1 'Ergebnis um eins erhöhen summand2 = 1 'Summand2 Case Else summand2 = x - summand1 'Summand2 End Select lblAufgabe.Caption = Str$(summand1) & " +" & Str$(summand2) + " =" 'Aufgabe in Label schreiben lblAufgabe.Visible = True 'Aufgabe anzeigen txtErgebnis.Text = "" 'Textfeld löschen txtErgebnis.Visible = True 'Antwortfeld anzeigen Me.KeyPreview = True 'Tastencodes abfragen txtErgebnis.SetFocus 'Cursor ins Textfeld setzen End Sub
Um die Zahlen in unser Aufgaben-Label einzufügen, müssen wir sie zunächst in eine Zeichenkette umwandeln. Dies machen wir mit der Funktion Str$, z.B.
Wir ketten mehrere Zeichenketten zusammen mit dem Zeichenkettenoperator "&".
Anmerkung: Es funktioniert auch mit einem einfachen +, ist aber "unsauber".
Auf diese Weise bilden wir dann die Rechenaufgabe für jede Runde neu:
lblAufgabe.Caption = Str$(summand1) & " +" & Str$(summand2) + " ="
Das war's auch schon. Jetzt können wir zusätzlich zwischen verschiedenen Additionen auswählen.
© Copyright 1998-2000 J.Behling
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.