Material für den Informatikunterricht
Die Dynaturtle
Mit "Turtle" = engl. Schildkröte wird das virtuelle Tier (heute nur noch ein Dreieck) bezeichnet, das in deutschen Logo-Versionen kurz "Igel" heißt. Man spricht bei LOGO auch von "Turtlegrafik". (Wer ein bisschen experimentieren will: Nach Registrierung kann man eine 30-Tage-Testversion von Win-Logo herunterladen.)
1982 haben zwei Wissenschaftler am MIT überlegt, wie man einen Igel (s.o.) für eine "Welt" (= Umgebung = Computer) entwickeln könnte, in der es keine Schwerkraft und keine Reibung gibt, also keine Kraft außer dem eigenen Antrieb.
Die beiden hießen Andy diSessa und Dan Watt.
Sie nannten den Igel, der sich so verhält, als flöge er im Weltraum umher, Dynaturtle (= dynamische Schildkröte). Die Dynaturtle berücksichtigt bei ihrem "Flug" immer auch den Impuls des vorigen Schrittes (Kraft, Winkel). Gleichzeitig war mit diSessas und Watts genialen Logo-Arbeiten auch das Problem gelöst, wie denn diese Dynaturtle um die Kurve fliegen kann und nicht nur Treppen steigt.
Hier ist der Code für Winlogo 2.0, deutsche Version.
PR start ;* ##### Startdatei ###### DZ "Ausstieg mit Taste 5!" SETZE "sprung.x" 0 SETZE "sprung.y" 0 flug ENDE PR flug tasten dynaturtle flug ENDE PR dynaturtle ;* Dynaturtle von Andy diSessa und Dan Watt, Massachusetts 1982 ;* (c) deutsche Adaption von Michael Kraus, 1992 - 2009 ;* Kontakt www.michael-kraus.info SETZE "sprung.x" :sprung.x + (SIN KURS) SETZE "sprung.y" :sprung.y + (COS KURS) AUFXY (XKO + :sprung.x) (YKO + :sprung.y) ENDE PR tasten SETZE "t" TASTE ;* Version für Win-Logo 2.0 deutsch WENN :t = "d" DANN LI 30 RK ;* d = NUM 4 WENN :t = "e" DANN DZ "Abbruch!" AUSSTIEG ;* e = NUM 5 WENN :t = "f" DANN RE 30 RK ;* f = NUM 6 WENN :t = "h" DANN RK SONST tasten ;* h = NUM 8 ENDE
Und der Code hat auch prompt in Winlogo 2.0 einen Schönheitsfehler: Was in Winlogo 1.0 noch fehlerfrei lief, läuft jetzt zwar auch, lässt sich aber nur beenden, indem man nach der Taste 5 noch zusätzlich per Maus auf "Stop" im LOGO-Menü klickt. Weiß Gott, warum...
Zum Wahnsinn, dass man für das Auslesen der Taste 5 den Buchstaben e braucht, siehe die Winlogo-Seite.
Igel im Weltraum
Die Genialität besteht natürlich in den drei Prozeduren, die hier flug, dynaturtle und tasten heißen, speziell in der Verwendung der Sinus- und Cosinus-Funktion. Hierzu ein Datenblatt in Excel. Was Sinus und Cosinus hier bewirken, kann man sich in unten den Experimenten der letzten Fragen anschauen.
Andy diSessa und Dan Watt haben hier mathematisch und auf dem Bildschirm die Bewegungen umgesetzt, die eine Rakete ohne Schwerkraft und ohne Reibung vollzieht, die also im Weltraum fern aller Sterne umherkurvt. Was geschieht, wenn so ein Ding zunächst geradeaus fliegt und dann nach rechts abbiegen will?
Das Problem gibt es ähnlich auch schon auf der Erde, jedenfalls auf dem Wasser: Ein Schiff, so nehmen wir an, kann die Schiffsschraube nicht auf "rückwärts" stellen, das Schiff kann aber wohl nach rechts und links gelenkt werden. Wie kommt der Kapitän auf der kurvenreichen Mosel klar? Jedenfalls darf er nicht einfach erst in der Kurve das Steuer drehen. So ein Schiff, das zuerst geradeaus fährt und dann 90° nach rechts will, muss schon vor der Kurve anfangen zu drehen und in der Kurve eventuell mehr als 90° drehen, um Tempo aus dem Vortrieb herauszunehmen und zum Ziel zu kommen. Und vor dem Hafen müsste dieses besondere Schiff wirklich auf Gegenkurs gehen, damit der Vortrieb aufgehoben wird und der Kapitän an Land gehen kann.
Fragen
- Wie nehme ich als Spieler Tempo aus dem Flug der Dynaturtle?
- Was bewirkt PR flug, da steht doch gar nichts drin?
- Was macht das Programm, wenn ich eine falsche Taste drücke?
- Kann ich das, was in PR dynaturtle steht, nicht gleich in PR flug eintragen?
- Hier gibt es zwei rekursive Kreisläufe; welche? wozu? Geht's nicht auch ohne sie?
- Wodurch wird der Igel beim Geradeausflug immer schneller?
- Was muss ich umprogrammieren (es ist ganz einfach), damit die Dynaturtle bei Taste 2 und 6 auf der Stelle dreht und nur bei Taste 8 weiterfliegt?
- Wie fliegt der Igel, wenn ich den Winkel in PR tasten auf 90° setze?
- Fliegt diese Dynaturtle eigentlich echt um die Kurve oder bewegt sie sich genau gesehen geradeaus von Punkt zu Punkt? Wie protokolliert man den Flug? Wie reproduziert man dann diese Flugroute?
- Was ändert sich am Flug, wenn ich (SIN KURS)/2 setze - ebenso bei COS KURS?
- Was passiert, wenn ich statt (SIN KURS) und (COS KURS) einen festen Wert (z.B. 0.5) eingebe?
- Was ändert sich am Flug, wenn ich (SIN KURS) und COS KURS vertausche?
"Derry Porhan" - Landung auf einem fremden Stern
("Derry Porhan" ist ein Anagramm ...)
Die Programmierung dieses Spiels kann man so aufteilen:
- Einen Landeplatz (ein Quadrat) per Zufallszahlen auf den Bildschirm bringen.
- Den Igel mit den Tasten des Ziffernblocks zum Laufen bringen; zunächst läuft er Treppen, dann wird er zur Dynaturtle - siehe oben.
- Prüfen, ob der Igel gelandet ist, siehe Grafik. Das geht so: Zuerst wird geprüft, ob die Igel-Koordinaten größer als der x-Wert der linken Seite des Landeplatzes und gleichzeitig kleiner als der x-Wert der rechten Seite des Landeplatzes sind; hier = grüner Bereich. Wenn das der Fall ist, wird sogleich geprüft, ob das auch für die y-Werte zutrifft; hier = roter Bereich. Wenn das alles wahr ist, dann ist der Igel gelandet.
- Es werden entweder Punkte pro Sprung der Dynaturtle vergeben (Ziel ist dann, mit möglichst wenig Sprüngen zu landen) oder es wird die Zeit gemessen (Logo kann mit der Systemzeit arbeiten, dann nimmt man die Differenz zwischen Start und Landung in Sekunden).
- Feinheiten der Übergabe von Parametern: Zwei Spieler im Wechsel über mehrere Runden. Dazu braucht man bei zehn Runden den Code nicht zwanzigmal, sondern genau einmal mit Wechsel der Parameter für "spieler.a" und "spieler.b". Siehe das Grundmuster als Prozedur (Textdatei). - Frage: Wie kommt es, dass im Code immer nur "spieler.a" angesprochen wird und Punkte bekommt, obwohl das doch z.B. einmal Otto und anschließend Willi ist und die beiden sich dauernd abwechseln. Wieso verwechselt Logo da nichts?
Das komplette Programm folgt hier als Textdatei. Dazu ein paar Einschränkungen:
- "Derry Porhan" habe ich Anfang der 90er Jahre für das gute alte DOS-LOGO entwickelt. Da funktionierte alles inklusive Bild als Hintergrund und Musik beim Landen.
- Diese Zeiten sind vorbei. Winlogo in Version 1 macht bei einer log-Datei von 2 KB Schluss: Abstürze, keine Speicherung...
- Winlogo in Version 2 erlaubt größere Dateien, macht dafür aber Ärger mit Text- und Graphik-Bildschirm: Beides darf blöderweise bei der Eingabe mit der Tastatur (irgendwie muss man ja die Rakete lenken) nicht ganz maximiert und auch nicht ganz geschlossen werden. - Lösung: Den Textschirm klein und rechts unten auf nur zwei Zeilen Höhe zusammenschieben. Wenn man es geschickt anstellt, dann werden dabei die Scrollbalken des Graphikschirms noch nicht sichtbar.
- Was fehlt, ist der programmierte Umgang mit dem Rand, der Fenstergrenze: Der Igel sollte auf der entgegengesetzten Seite wieder hereinkommen. Da hat Winlogo 2 endlich einmal etwas Vernünftiges zu bieten, nämlich MAXX und MAXY, was einfach aus der Konfiguration die Maße des Bildschirms sind. Damit lässt sich ein Randsprung programmieren, und zwar unabhängig davon, an welchem Bildschirm man mit Logo sitzt. Das geht z.B. so:
PR landetest
WENN XKO > MAXX DANN SH AUFX 0 SA
WENN XKO < 0 DANN SH AUFX MAXX SA
WENN YKO > MAXY DANN SH AUFY 0 SA
WENN YKO < 0 DANN SH AUFY MAXY SA
PRÜFE ... ;* Test, ob die Igelkoordinaten sich im Landequadrat befinden...
ENDE
- Zum Wahnsinn, dass die Eingaben auf dem Ziffernblock intern als Buchstaben von a bis i interpretiert werden, siehe auch meine allgemeine Winlogo-Seite: "Tastaturabfrage mit TASTE".
- Man könnte jetzt auch noch Musik machen und - was in Winlogo 1 nicht funktionierte - ein Bild als Hintergrund laden...
- Insgesamt arbeitet man bei so einem Spiel schon am Limit von Winlogo: Abstürze, fehlende oder falsche Fehlermeldungen gehören dazu. - Tipp: Alles immer in einer Logo-Datei speichern. Zusätzlich alles immer in einen Texteditor außerhalb von Logo kopieren.
Der Wettkampf beginnt: maximal 33 Sprünge pro Runde sind zu schaffen!
© Michael Kraus, Mai 2009 bis Juni 2010