Materialien zum Unterricht

Regentropfen fangen

Ein Eimer folgt der Maus

Ein grünes Rechteck stellt den Eimer dar, in den die Regentropfen reinfallen sollen. Zuerst wird nur der Eimer dargestellt, der laufend dem X-Wert des Mauszeigers folgt.

Die Position des Mauszeigers gehört zum Fenster, in dem sich der Eimer befindet. Dehalb hat das Fenster die Methode mausXLesen() und nicht der Eimer. Damit beide verbunden sind, wird extra ein Objekt fenster erstellt, in dem dann der Eimer gezeichnet wird.

Es tropft

Im nächsten Schritt erscheint in der Zeile mit dem y-Wert 70 der Regentropfen. Er ist ein Objekt vom Typ Kreis. Der X-Wert wird zufällig zwischen -40 und 40 bestimmt.

Nach dem Programmstart ist der grüne Eimer und der zufällig plazierte Tropfen zu sehen. Der Eimer folgt dem Mauszeiger, der Tropfen bewegt sich noch nicht.

Damit der Tropfen fällt, genügt ein weiterer Befehl zum Verschieben in der unendlichen Schleife. Leider ist er nur einmal zu sehen. Im nächsten Punkt wird gezeigt, wie er dauerhaft fällt.

Der Tropfen darf nur solange fallen, wie sein Y-Wert größer als 5 ist. Deshalb muss eine innere Schleife eingebaut werden, die vor jedem Durchlauf prüft, ob der Y-Wert des Tropfens die Grenze erreicht hat. Ist das der Fall, wird die Schleife nicht weiter durchlaufen.

Nach dieser Schleife muss der X-Wert des Tropfens wieder auf einen Zufallswert zwischen -40 und 40 und der Y-Wert auf 70 eingestellt werden. Nun solte es ununterbrochen tropfen.

Trefferanzeige

Bisher wird auf gefangene Tropfen noch nicht reagiert. Jetzt werden die Tropfen, die den Eimer treffen, gezäht und die Anzahl angezeigt.

Die Anzeige erfolgt in einem Objekt vom Typ Textfeld. Das Objekt heißt anzeige. Über die entsprechenden Methoden bekommen die Attribute des Textfeldes ihre Werte zugewiesen. Die linke, obere Ecke liegt bei -100, 60; die rechte untere Ecke bei -45, 50. Die Größe darf nicht automatisch angepasst werden und die Schriftgröße wird auf 25 gesetzt.

Danach wird eine Variable treffer vom Typ Integer erzeugt und dieser der Wert 0 zugewiesen. Über zwei Zeilen zu Beginn der unendlichen Schleife wird die Treffenanzahl in das Textfeld geschrieben.

Zum Schluss fehlt noch der Test, ob der Tropfen im Eimer ist. Dazu kommt unter die Wiederholung, die den Tropfen fallen lässt, eine Entscheidung. Es werden die beiden X-Werte vom Tropfen und vom Eimer verglichen. Sind beide gleiche, wird die Variable treffer um 1 erhöht.

Das sieht erst Mal vernünftig aus, funktioniert aber nicht. Die beiden X-Werte werden als Zahlen vom Typ Real zurückgegeben. Das sind Kommazahlen und die müssen bis auf die letzte Stelle übereinstimmen. Das geht nicht.

Deshalb müssen die X-Werte vor dem Vergleich gerundet werden. Diese Funktion liefert als Ergebnis eine Ganzzahl (Interger) und die könne dann verglichen werden.

An Stelle von tropfen.mitteXLesen() schreibt man round(tropfen.mitteXLesen()).

Damit man dem Tropfen nicht genau die Mitte des Eimers treffen muss, wird der Vergleich noch erweitert. Überlage, was die Variable breite bedeutet und bestimme sie mit einer Methode des Objektes Eimer gleich zu Beginn des Programms.

zurück