multipleTurtle
Deutsch   English   

17. MEHRERE TURTLE-OBJEKTE

 

 

DU LERNST HIER...

 

dass du in einem Programm mehrere Turtles erzeugen kannst und erhältst einen ersten Einblick in die objektorientierte Programmierung.

 

 

MUSTERBEISPIELE

  Beispiel 1: Mehrere Turtles erzeugen.
In den bisherigen Beispielen hast du eine globale Turtle verwendet, die keinen Namen braucht und direkt alle Befehle aus der Bibliothek gturtle verwenden kann. Wenn du mehrere Turtles verwenden willst, musst du jeder Turtle einen Namen geben.
Mit der Anweisung john = Turtle() erzeugst du eine Turtle mit dem Namen john. Mit der Anweisung lia = Turtle() erzeugst du eine Turtle mit dem Namen lia. Du kannst die benannten Turtles mit den dir bekannten Befehlen steuern, aber du musst immer sagen, welche der Turtles du meinst. Dazu stellst du dem Befehl den Turtle-Namen durch einen Punkt getrennt voran, z.B. john.forward(50).  

Programm:

from gturtle import *

john = Turtle()
john.forward(50)
john.right(90)
john.forward(50)
lia = Turtle()
lia.setColor("red")
lia.setPenColor("red")
lia.back(50)
lia.left(90)
lia.forward(50)
► In Zwischenablage kopieren

 

Beispiel 2: Zwei Turtles zeichnen Sterne
Du kannst die Turtles auch abwechslungsweise zeichnen lassen. Hier zeichnen john und lia je eine Sternfigur.
 

Programm:

from gturtle import *

john = Turtle()
lia = Turtle()
john.left(90)
john.setPenColor("green")
lia.right(90)
lia.setPenColor("red")

repeat 9:
    john.forward(150)
    lia.forward(150)
    john.left(160)
    lia.right(160)
► In Zwischenablage kopieren

 

Beispiel 3: Turtle-Namen als Parameter
Drei Turtles sollen Türme zeichnen, die aus 5 kleinen Quadraten bestehen. Dazu definierst du eine Funktion square(t) mit dem Parameter t. Beim Aufruf square(joe), zeichnet die Turtle joe ein Quadrat, analog square(luka) und square(mia).
 

Programm:

from gturtle import *

def square(t):
    repeat 4:
        t.forward(40)
        t.right(90)
    t.forward(40)    

joe = Turtle()
luka = Turtle()
mia = Turtle()
joe.setPenColor("red")
luka.setPenColor("green")
mia.setPenColor("blue")
joe.setPos(-100, -100)
luka.setPos(0,-100)
mia.setPos(100, -100)

repeat 5:
    square(joe)
    square(luka)
    square(mia)
► In Zwischenablage kopieren

 

Beispiel 4: Turtles per Mausklick erzeugen
Bei jedem Mausklick wird an der aktuellen Maus-Position eine Turtle erzeugt und diese zeichnet einen Stern. Mit dem nächsten Mausklick musst du allerdings warten, bis der Stern fertig gezeichnet ist.
Für das Zeichnen eines Sternes verwendest du wie im Beispiel 3 die Funktion star(t). Jede Turtle wird mit der Callback-Funktion onMousePressed() erzeugt, die bei einem Mausklick aufgerufen wird.

 

 

Programm:

from gturtle import *

def onMousePressed(x, y):
    t = Turtle()
    t.setPos(x, y)
    star(t)

def star(t):
    t.setFillColor("red")
    t.startPath()
    repeat 4:
        t.forward(50)
        t.left(144)
    t.fillPath()

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Mit der Anweisungen joe = Turtle(), luka = Turtle() usw. kannst du mehrere Turtles erzeugen und diese im gleichen Grafikfenster zeichnen lassen. Du verwendest dabei Befehle aus der Bibliothek gturtle, musst aber jedem Befehl den Turtlenamen durch einen Punkt getrennt voranstellen. Diese Art Befehle aufzurufen ist charakteristisch für objektorientierte Programmierung (OOP). Diese Programmiertechnik wird in einigen professionellen Programmiersprachen wie z.B. Java oder C++ verwendet.

 

 

ZUM SELBST LÖSEN

 
1.

Zwei Turtles zeichnen abwechslungsweise Linien einer Spirale. Die erste Turtle zeichnet rot und dreht nach jeder gezeichneten Linie 90° rechts, die zweite Turtle zeichnet grün und dreht jeweils 90° links.


 

2.

Eine rote und eine schwarze Turtle zeichnen abwechslungsweise Quadrate. Die rote beginnt unten, die schwarze rechts.

 

 

3.

Zwei Turtles zeichnen abwechslungsweise gefüllte Quadrate.

 

 

 

 

 



4.

Per Mausklick werden Turtles erzeugt. Jede Turtle bewegt sich danach eine kurze Strecke vorwärts und zeichnet einen gefüllten Kreis (dot).