TurtleScript
TurtleScript ist die Logo-Programmiersprache im KDE Programm kturtle. Diese Programmiersprache mit der kriechenden Schildkröte ist sehr intuitiv und einfach für Kinder zu lernen. Leider ist die Dokumentation nur in Englisch. Gute Beispiele kommen gleich mit dem Programm mit. Hier eine kurze Zusammenfassung.
In Kürze
Kontrollfluss
| Struktur | Bedeutung |
|---|---|
# irgendein text | Kommentar |
wait sekunden | Warten, sekunden-Sekunden Pause machen |
repeat anzahl {…} | Schlaufe anzahl-Mal wiederholen |
while bedingung {…} | Wiederhole Schlaufe solange bedingung zutrifft |
for variabel = startwert to endwert {…} | Zähle die variabel von startwert bis endwert und wiederhole dabei die Schlaufe |
for variabel = startwert to endwert step schrittweite {…} | Zähle die variabel in schrittweite Schritten von startwert bis endwert und wiederhole dabei die Schlaufe |
break | Schlaufe verlassen |
exit | Programm beenden |
if bedingung {…} | Wenn bedingung zutrifft dann den Block ausführen, sonst nicht |
if bedingung {…} else {…} | Wenn bedingung zutrifft dann den ersten Block ausführen, sonst den zweiten nach else |
learn kommando parameter1, __parameter2_, … {…} | Lernt ein neues Kommando mit Null bis zu einer beliebiger Anzahl Komma getrennter Parameter. Der Block wird beim Aufruf mit den übergebenen Parametern ausgeführt. (Funktion, Prozedur) |
Kommandos
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| forward | fw | Pixel | Vorwärts |
| backward | bw | Pixel | Rückwärts |
| center | Setzt die Schildkröte in die Mitte. | ||
| go | X, Y | Gehe zur Koordinate X, Y |
|
| gox | X | Gehe links oder rechts zur Koordinate X ohne die Höhe Y zu ändern. |
|
| goy | Y | Gehe nach obenoder unten zur Koordinate Y ohne vertikale Posidion X zu verändern. |
|
| turnleft | tl | Grad | Links drehen |
| turnright | tr | Grad | Rechts drehen |
| direction | dir | Grad | Setzt die Blickrichtung in eine bestimmte Richtung |
| penup | pu | Stift absetzen (hochheben): Die Schildkröte zeichnet keine Spur mehr | |
| pendown | pd | Stift auf die Leinwand aufsetzen: Die Schildkröte zeichnet wieder | |
| penwidth | pw | Pixel | Breite des Stifts, Breite der gezeichneten Spurlinie in Pixel |
| pencolor | pc | R, G, B | Farbe des Malstifts, also der gezeichneten Spur |
| canvassize | cs | X, Y | Festlegen der Leinwandgrösse in Pixeln |
| canvascolor | cc | R, G, B | Hintergrundfarbe der Leinwand festlegen |
| clear | ccl | Leinwand löschen, die Schildkröte und die Farben bleibt unverändert | |
| reset | Leinwand löschen, Farben zurücksetzen und die Schildkröte wieder in die Mitte zurück setzen | ||
| spriteshow | ss | Zeige die Schildkröte | |
| spritehide | sh | Verstecke die Schildkröte | |
| "text" | Text schreiben | ||
| fontsize | grösse | Schriftgrösse in Pixel setzen | |
| message | "text" | Öffnet ein Fenster mit dem Text |
Funktionen
| Funktion | Abkürzung | Parameter | Rückgabewert |
|---|---|---|---|
| getx | X-Koordinate der Position | ||
| gety | Y-Koordinate der Position | ||
| ask | "frage" | Stellt eine Frage und gibt die Antwort zurück | |
| round | (x) | Zahl x auf- oder abrunden | |
| random | rnd | min, max | Zufällige Zahl zwischen min und max, also grösser oder gleich min und kleiner oder gleich max |
| sqrt | x | Berechnet die Wurzel der Zahl x | |
| pi | Die Zahl PI (π) | ||
| sin | x | Sinus von x | |
| cos | x | Cosinus von x | |
| tan | x | Tangens von x | |
| arcsin | x | Arcussinus von x (die Umkehrfunktion von Sinus) | |
| arccos | x | Arcuscosinus von x (die Umkehrfunktion von Cosinus) | |
| arctan | x | Arcustangens von x (die Umkehrfunktion von Tangens) |
Kommentare
Kommentare helfen das Programm zu verstehen. Kommentare beginnen mit # und gehen bis zum Ende der Zeile.
# Kommentar: Dies zeichnet ein Viereck
repeat 4 { # Vier Mal weiderholen für vier Seiten
forward 100 # Zeichne eine Seite
turnright 90 # Drehe dann für die nächste Seite
}
Kommandos
Laufen
Die Schildkröte wird über den Bildschirm bewegt. Wenn der Stift unten ist, zeichnet sie dabei eine Spur. Die Schildkröte bewegt sich nicht um Centimeter oder Millimeter, sondern um eine Anzahl Pixel, das sind Punkte auf dem Bildschirm. Um 100 Punkte vorwärts lauffen heisst also: forward 100
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| forward | fw | Pixel | Vorwärts |
| backward | bw | Pixel | Rückwärts |
Beim Gehen zu einer Koordinate zeichnet die Schildkröte keine Spur.
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| center | Setzt die Schildkröte in die Mitte. | ||
| go | X, Y | Gehe zur Koordinate X, Y |
|
| gox | X | Gehe links oder rechts zur Koordinate X ohne die Höhe Y zu ändern. |
|
| goy | Y | Gehe nach obenoder unten zur Koordinate Y ohne vertikale Posidion X zu verändern. |
Drehen
Wenn sich die Schildkröte dreht, ist die Einheit Grad (°) der Winkels. Ein voller Kreis hat 360°. Drehen nach rechts im Rechten Winkel heisst also: turnright 90
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| turnleft | tl | Grad | Links drehen |
| turnright | tr | Grad | Rechts drehen |
| direction | dir | Grad | Setzt die Blickrichtung in eine bestimmte Richtung |
Positionsabfrage
| Funktion | Abkürzung | Parameter | Rückgabewert |
|---|---|---|---|
| getx | X-Koordinate der Position | ||
| gety | Y-Koordinate der Position |
Die Position kann für Berechungen verwendet oder einer Variabel zugewiesen werden, z.B. $x = getx oder gox getx/2
Stift kontrollieren
Den Schreibstift der Schildkröte kann man wie folgt beeinflussen:
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| penup | pu | Stift absetzen (hochheben): Die Schildkröte zeichnet keine Spur mehr | |
| pendown | pd | Stift auf die Leinwand aufsetzen: Die Schildkröte zeichnet wieder | |
| penwidth | pw | Pixel | Breite des Stifts, Breite der gezeichneten Spurlinie in Pixel |
| pencolor | pc | R, G, B | Farbe des Malstifts, also der gezeichneten Spur |
Leinwand kontrollieren
Die Leinwand ist das leere Blatt, auf das die Schildkröte zeichnet.
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| canvassize | cs | X, Y | Festlegen der Leinwandgrösse in Pixeln |
| canvascolor | cc | R, G, B | Hintergrundfarbe der Leinwand festlegen |
Löschen
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| clear | ccl | Leinwand löschen, die Schildkröte und die Farben bleibt unverändert | |
| reset | Leinwand löschen, Farben zurücksetzen und die Schildkröte wieder in die Mitte zurück setzen |
Schildkröte anzeiogen
Die Schildkröte ist unser kleine Geist, der unsere Kommandos ausführt. Wir können ihn anzeigen oder verschwinden lassen.
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| spriteshow | ss | Zeige die Schildkröte | |
| spritehide | sh | Verstecke die Schildkröte |
Text schreiben
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| "text" | Text schreiben | ||
| fontsize | grösse | Schriftgrösse in Pixel setzen |
Benutzerinteraktion
| Kommando | Abkürzung | Parameter | Bedeutung |
|---|---|---|---|
| message | "text" | Öffnet ein Fenster mit dem Text |
| Funktion | Abkürzung | Parameter | Rückgabewert |
|---|---|---|---|
| ask | "frage" | Stellt eine Frage und gibt die Antwort zurück |
Beispiele: message "Ich starte jetzt!" oder for $i=1 to ask "Wieviele Linien soll ich zeichnen?"
Mathematische Funktionen
| Funktion | Abkürzung | Parameter | Rückgabewert |
|---|---|---|---|
| round | (x) | Zahl x auf- oder abrunden | |
| random | rnd | min, max | Zufällige Zahl zwischen min und max, also grösser oder gleich min und kleiner oder gleich max |
| sqrt | x | Berechnet die Wurzel der Zahl x | |
| pi | Die Zahl PI (π) | ||
| sin | x | Sinus von x | |
| cos | x | Cosinus von x | |
| tan | x | Tangens von x | |
| arcsin | x | Arcussinus von x (die Umkehrfunktion von Sinus) | |
| arccos | x | Arcuscosinus von x (die Umkehrfunktion von Cosinus) | |
| arctan | x | Arcustangens von x (die Umkehrfunktion von Tangens) |
Kontrollfluss
Warten
wait s wartet s Sekunden lang.
Schlaufen
Wiederholen
repeat $n {…} wiederholt $n-Mal. Das ist die einfachste Schlaufe.
Ein Viereck zeichnen vier Linien in um 90° verschobene Richtungen:
repeat 4 {
forward 100
turnright 90
}
Wiederholen mit Zähler
Eine for-Schlaufe ist ähnlich wie repeat, es gibt aber eine Variabel, welche die Schritte zählt. Dies ist notwendig, wenn man wissen muss, im wievielten Durchlauf die Wiederholung ist.
Beispiel: Ein Viereck soll dünne Linien haben, aber die zweite Linie soll dicker sein:
for $i = 1 to 4 { # $i zählt von 1 bis 4
if $i == 2 { # nur die zweite Linie
penwidth 5 # dick zeichen
} else { # sonst immer
penwidth 1 # dünn
}
forward 100
turnright 90
}
Man kann auch die Schrittweite angeben mit step. Eine Schleife von 10 bit 100 in 10er-Schritten heisst dann: for $i=10 to 100 step 10
Bedingte Schleife
Wiederhole Kommandos solange, wie eine Bedingung gilt, schreibt man mit while $Bedingung {…}.
while (ask "Weitermachen (j/n)?")=="j" {
...
}
Aus einer Schleife herausspringen
Eine Schleife kann man vorzeitig verlassen mit dem Kommando break.
Beispiel:
while true { # für immer wiederholen, ausser ...
...
if $x==$y {
break # ... wir springen absichtlich heraus ...
}
}
# ... und landen hier
Programm beenden
Das Kommando exit beendet sofort das Programm.
Bedingungen
Wenn bestimmte Operationen nicht immer durchgeführt werden sollen, kann man Bedingungen setzen mit if, das bedeutet «wenn». Neben dem if gibt es noch ein else, das bedeutet «sonst». Das was in else steht, wird nur durchlaufen, wenn die Bedingung falsch ist:
if $x > 5 {
print "$x ist gösser als fünf"
}
if $x > 5 {
print "$x ist gösser als fünf"
} else {
print "$x ist kleiner oder gleich gross wie fünf"
}
Eigene Kommandos
Eigene Kommandos (Funktionen) kann der Computer lernen, darum heisst der Befehl dazu learn.
Nochmals zum Viereck: Wenn ich nur noch viereck schreiben will, um ein Viereck zu zeichnen, kann ich der Schildkröte das beibringen:
learn viereck {
repeat 4 {
forward 100
turnright 90
}
}
Wenn ich nun irgendwo viereck schreibe, zeichnet die Schildkröte ein Viereck genau da, wo sie steht.
Aber alle Vierecke sind immer gleich gross. Und was ist mit Dreiecken oder Fünfecken? Ich will die Länge angeben (nicht nur 100) und die Anzahl Ecken (nicht nur 4). Die Zahl 90 kommt davon, dass wir den Kreis mit 360° durch 4 teilen, also ist eigentlich 360/4 gemeint.
Ein n-Eck ist also:
repeat $n {
forward $laenge
turnright 360/$n
}
Dabei ist $n die Anzahl Ecken und $laenge die Länge einer Seite. Daraus können wir ein Kommando (eine Funktion) schreiben, welchem mal die Werte für $n und $laenge als Parameter übergibt, genauso wie bei den eingebauten Kommandos:
learn n_eck $n, $laenge {
repeat $n {
forward $laenge
turnright 360/$n
}
}
Nun kann ich n_eck 5, 50 schreiben um ein Fünfeck mit der Seitenlänge 50 zu zeichnen.
Mögliche Bedingungen
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
== | Gleich wie | $a == $b |
!= | Ungleich, verschieden | $a == $b |
< | Kleiner als | $a < $b |
> | Grösser als | $a > $b |
⇐ | Kleiner oder gleich wie | $a ⇐ $b |
>= | Grösser oder gleich wie | $a >= $b |
Wenn eine Bedingung zutrifft, ist ihr Wert true, das bedeutet «wahr». Wenn sie nicht zutrifft, ist ihr Wert false, das bedeutet «falsch».
Variabeln
Variabeln beginnen immer mit einem $-Zeichen. Die Variable x heisst also $x. Man kann den Variabeln alle möglichen Typen zuweisen.
Typen
- Zahlen:
1,2,1.5,-0.5, u.s.w. - Texte:
"Hallo Welt" - Logische Werte:
true(wahr),false(falsch)
Beispiele:
$a = 4.25($ahat nun den Wert4.25)$txt = "Dein Name ist "+ask "Was ist Dein Name?"$b = $txt == "hallo"($bisttrue, wenn die Variabel$txtgenau den Werthallohat, sonst ist esfalse)
Koordinaten
Koordinaten sind die direkte Adressierung eines Punktes auf der Leinwand. Wenn die Leinwand z.B. 200x200 Pixel misst, ist:
| Position | X | Y | Koordinaten |
|---|---|---|---|
| oben links | 0 | 0 | 0, 0 |
| oben rechts | 200 | 0 | 200, 0 |
| unten links | 0 | 200 | 0, 200 |
| unten rechts | 200 | 200 | 200, 200 |
Farben
Farben werden mit ihrem Rot-, Grün- und Blau-Anteil angegeben, abgekürzt: R, G, B. Jeder Wert für R, G und B geht von 0 (keine Farbe) bis 255 (maximale Farbe).
Beispiele:
| Farbe | R, G, B Wert | Kommentar |
|---|---|---|
| Schwarz | 0, 0, 0 | Keine Farbe |
| Weiss | 255, 255, 255 | Alle Farben im Maximum |
| Grau | 127, 127, 127 | Schwarz und Weiss gemischt: alle Farben zur Hälfte |
| Rot | 255, 0, 0 | Maximum Rot |
| Grün | 0, 255, 0 | Maximum Grün |
| Blau | 0, 0, 255 | Maximum Blau |
| Gelb | 255, 255, 0 | Rot und Grün gemischt |
| Türkis | 0, 255, 255 | Grün und Blau gemischt |
| Violett | 255, 0, 255 | Rot und Blau gemischt |
| Hellrot | 255, 127, 127 | Maximum Rot gemischt mit der Hälfte der anderen Farben |
| Hellgrün | 127, 255, 127 | Maximum Grün gemischt mit der Hälfte der anderen Farben |
| Hellblau | 127, 127, 255 | Maximum Blau gemischt mit der Hälfte der anderen Farben |
| Dunkelrot | 127, 0, 0 | Rot nur zur Hälfte |
| Dunkelgrün | 0, 127, 0 | Grün nur zur Hälfte |
| Dunkelblau | 0, 0, 127 | Blau nur zur Hälfte |
