Java/Turtle-Grafik
Die folgenden Beispiele basieren auf der in Java geschriebenen Turtle-Grafik-Engine von A. Hermes, die sich problemlos in BlueJ einbinden lässt.
Es fehlen zu den Aufgaben einige Beispielbilder, die ich aus Copyrightgründen nicht einfügen kann.
Elementare Methoden
zumStart (x,y) - setzt die Turtle nach (x|y) vor (länge) - geht um „länge“-Punkte vorwärts drehe (winkel) - dreht bei positiven Zahlen rechts, bei negativen links herum. schreibe (text) - schreibt einen String text an die aktuelle Position hebeStift() - zeichnet nicht beim Bewegen senkeStift() - zeichnet beim Bewegen setzeFarbe(Turtle.rot) - Farben: .schwarz, .grün, .blau, .gelb, .rot, .grau, .hellgrau, .orange, .weiß;
Erstes Beispiel
<java> public class Figuren {
// Eigenschaften Turtle t;
// Konstruktor public Figuren() { double x,y; t=new Turtle(); // legt eine neue Turtle mit den Namen "t" an. x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte t.setzeFarbe(Turtle.blau); // legt Farbe fest }
// Methoden public void zeichneQuadrat(int pLänge){ zeichneRechtenWinkel(pLänge); zeichneRechtenWinkel(pLänge); } public void zeichneRechtenWinkel(int pLänge) { t.vor(pLänge); t.drehe(90); t.vor(pLänge); t.drehe(90); } // ... hier weitere Methoden einfügen
} // Ende der Klasse Figuren </java>
- Tippen Sie die Klasse Figuren ab.
- Ergänzen Sie die Klasse Figuren um folgende Methoden:
- zeichneGrößerwerdendeQuadrate(...)
- zeichneRechteck(int pLänge, int pBreite)
- zeichneSchweizerFahne( )
- zeichneGleichseitigesDreieck(int pLänge)
- zeichne5Eck(int pLänge)
- zeichneStern (...)
- zeichneMittelquadrat(...)
- zeichneFünfeck(...)
- Zeichnen Sie das Haus vom Nikolaus. Denken Sie daran, dass Sie für die Berechnung der Länge der Diagonalen und des Dachs den Satz den Pythagoras benutzen können. Hinweis: Befehl für Wurzel aus x: Math.sqrt(x)
- Lassen Sie eine Uhr mit Zeigern zeichnen: zeichneUhr(int Stunden, int Minuten)
- Überprüfen Sie vor der Zeichnung, ob die Werte zulässig sind (Stunden 0-23, Minuten 0-59).
- Profis: Schauen Sie sich das Klassendiagramm der Klasse TestTurtle an . Es enthält alle Methoden, die benutzt werden können. Probieren Sie Methoden aus, die Ihnen praktisch vorkommen.
Nach Einführung der for-Schleife
Zweites Beispiel: Ein Zahlenstrahl
<java>
public void zeichneZahlenstrahl (int pErsteZahl, int pLetzteZahl) { for (int i=pErsteZahl; i<=pLetzteZahl; i++) { t.vor(20); t.schreibe(""+i); // Trick! Einfache Typumwandlung zu String } }
</java>
- Analysieren Sie die Methode zum n-Eck.
- Wie kann ich einen Kreis zeichnen?
- Lassen Sie eine „Perlenschnur“ zeichnen. Hinweis: t.fülleKreis(double radius)
- Lassen Sie ein „Standardkoordinatensystem“ zeichnen, das auf beiden Achsen von -5 bis 5 geht. Vergessen Sie die Achsenbeschriftung (x und y) und die Pfeilspitzen nicht.
- Lassen Sie mit Hilfe einer Schleife Muster wie die folgenden erstellen. Klären Sie dazu auch die Frage, wie man größer werdende Quadrate zeichnen lassen kann (siehe Quadratschnecke).
Eventsteuerung
<java> import java.awt.event.*; public class Figuren extends Turtle { (...)
public void mouseClicked(java.awt.event.MouseEvent me){ if (me.isMetaDown()) { t.drehe(10); } // Rechte Maustaste? else { if (me.getClickCount()==2) { // Doppelklick? t.drehe(180); // Falls Doppelklick } else { t.vor(10); // Falls einfacher Mausklick } } }
// Alternativ:
public void mouseClicked(java.awt.event.MouseEvent me){ if (me.isMetaDown()) { // rechte Maustaste gedrückt?
t.drehe(10); }
else {
t.vor(10); }
}
</java>
- Überlegen Sie sich Varianten zu diesen Malprogrammen.
- Realisieren Sie ein Hindernisrennen. Leider kann die Turtle nur schlecht abfragen, ob ein Hindernis gerammt wurde. Das müssen Sie selbst realisieren.
Threads
<java> Ergänzen Sie den Konstruktor von Figuren um folgende Zeilen:
(...) t.zeige();// ab hier neu: TurtleThread turtleThread; turtleThread = new TurtleThread(t); turtleThread.start(); }
Legen Sie eine neue Klasse TurtleThread an
public class TurtleThread extends Thread { Turtle t;
public TurtleThread(Turtle pT) { t = pT; } public void run() { for(int i = 0; i < 30; i++) { try { t.vor(10); sleep(1000); } catch(InterruptedException e) { } } }
} // Ende von TurtleThread </java>
- Realisieren Sie ein Hindernisrennspiel, bei dem der Benutzer mit der Linken Maustaste nach links und der rechten nach rechts dreht. Vorwärts geht die Turtle automatisch.
Weblink
- Turtlegrafiklibrary Quelle - turtle.jar lässt sich in BlueJ einbinden.