Mehrere Turtle-Objekte


In den bisherigen Beispielen wurde mit dem Befehl makeTurtle() eine globale Turtle erzeugt, die keinen Namen braucht und direkt alle Befehle aus der Bibliothek gturtle verwenden kann. Die Biblothek gturtle eignet sich aber auch für die objekt orientierte Programmierung (OOP).
john = Turtle() erzeugt ein Fenster mit dem Turtleobjekt john. Verwendet man in einem Programm ein benanntes Turtleobjekt, muss man jedem Turtle-Befehl den Turtlenamen voran stellen.

from gturtle import *

john = Turtle()
john.forward(30)
john.right(90)

Man kann auch mehrere Turtleobjekte erzeugen:

joe = Turtle() erzeugt Turtle joe in einem neuen Fenster.
luka = Turtle() erzeugt Turtle luka in wieder einem neuen Fenster.

Damit ale Turtles im gleichen Fenster erscheinen, erzeugt man zuerst mit
tf = TurtleFrame() ein leeres Turtlefenster und dann mit
joe = Turtle(tf) Turtle joe im Turtleframe tf und
luka = Turtle(tf) eine zweite Turtle luka im gleichen Fenster.

Im folgenden Beispiel bewegt sich die grüne Turtle joe 100 Schritte vorwärts und die rote Turtle luka führt die Befehle right(90) und forward(100) aus.

from gturtle import *

tf = TurtleFrame()
joe = Turtle(tf)
luka = Turtle(tf)
joe.setColor("green")
luka.setColor("red")
joe.forward(100)
luka.right(90)
luka.forward(100)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

 

Beispiel 1: Mit zwei Turtles kann man lustige Anwendungen programmieren. Die Turtles joe und luka zeichnen abwechslungsweise Quadrate. Während die eine Turtle ein Quadrat zeichnet, muss die andere warten.
Da die beiden Turtles gleich grosse Quadrate zeichnen, können wir für beide die gleiche Funktion square(t) verwenden. Der Parameter t steht hier für den Turtlenamen. Mit dem Aufruf square(joe) zeichnet die Turtle joe ein Quadrat.

# Tu9.py

from gturtle import *

def square(t):
    for i in range(4):
        t.forward(40)
        t.right(90)
    t.forward(40)    

tf = TurtleFrame()
joe = Turtle(tf)
luka = Turtle(tf)
luka.setColor("red")
luka.setPenColor("green")
joe.setPos(-100, -100)
luka.setPos(50,-100)

for i in range(5):
    square(joe)
    square(luka)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

def square(t) definiert die Funktion square() für eine beliebige Turtle t
square(joe) Aufruf der Funktion square für Turtle joe
square(luka) Aufruf der Funktion square für Turtle luka

 

Beispiel 2: Drei Turtles zeichnen farbige Sterne. Während die eine Turtle ein Segment zeichnet, müssen die anderen warten. Man kann die drei Turtles auch gleichzeitig zeichnen lassen. Diese Programmiertechnik wird im Kapitel Threads erklärt.

# Tu9a.py

from gturtle import *

def segment(t):
    t.forward(140)
    t.right(160)

tf = TurtleFrame()
joe = Turtle(tf)
luka = Turtle(tf)
sara = Turtle(tf)
luka.setColor("red")
sara.setColor("green")
luka.setPenColor("red")
sara.setPenColor("green")
joe.setPos(-135, -50)
luka.setPos(-10,-50)
sara.setPos(115,-50)

for i in range(9):
    segment(joe)
    segment(luka)
    segment(sara)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

 

Beispiel 3: Man kan für jede Turtle ein eigenes Bild verwenden. Der Pfad der Bilddatei wird beim Erzeugen der Turtle angegeben. Hier verwendet man die beiden Bilddateien beetle.gif und cuteturtle.gif, die sich in der TigerJython-Distribution befinden. Alle Bilder, die im Order "sprites" zur Verfügund stehen, sehen Sie in der TigerJython-IDE unter Hilfe-APLU Dokumentation-Bildbibliothek, oder in diesem Lehrgang unter dem Menüpunkt Dokumentation-Spritesbiblothek.

Sie können auch eigene Bilder verwenden. Ihr Bild muss im gif- oder png- Format sein und einen transparenten Hintergrund haben. Sie können im beliebigen Ordner auf Ihrem Computer gespeichert sein. Im Programm geben Sie den Pfad der Bilddatei an:
Unter Windows z.B.
makeTurtle("c:/users/UrsMeier/desktop/bilder/bild.gif")
oder makeTurtle("d:/bilder/bild.gif")

Unter MacOS z.B.
makeTurtle("/Users/UrsMeier/Desktop/Bilder/bild.gif")

 

Unter Windows können Sie die eigenen Bilder auch ein Unterverzeichnis sprites des Unterverzeichnises /bin des Installationsverzeichnisses speichern. Der Aufruf lautet dann:
makeTurtle("sprites/bild.gif")  

# Tu9b.py

from gturtle import *

def draw(t):
    t.forward(100)
    t.dot(20)
    t.back(100)
    t.right(45)
    
tf = TurtleFrame()
laura = Turtle(tf, "sprites/beetle.gif")
laura.setPenColor("red")
laura.setPos(-140, 0)
luka = Turtle(tf, "sprites/cuteturtle.gif")
luka.setPos(140, 0)

for i in range (8):
    draw(laura)
    draw(luka)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Anmerkung:

Auch wenn man nur eine Turtle verwendet, kann bei makeTurtle() eine Datei angegeben werden, welche als Turtlebild verwendet werden soll:

makeTurtle("sprites/beetle.gif")
  

 

Beispiel 4: Vier Turtles sind zu Beginn in den Ecken eines Quadrates positioniert. Bei jedem Schritt verfolgt jede Turtle die im Uhrzeigersinn benachbarte Turtle und zeichnet dabei eine Spur. Bevor sie erneut die Verfolgung aufnimmt, bewegt sie sich um eine kurze Strecke vorwärts. Damit das Zeichnen schneller erfolgt, wird speed auf -1 gesetzt.

from gturtle import *

def drawLine(a, b):
    ax = a.getX()
    ay = a.getY()
    a.moveTo(b.getX(), b.getY())
    a.setPos(ax, ay)
    
tf = TurtleFrame()
t1 = Turtle(tf)
t2 = Turtle(tf)
t3 = Turtle(tf)
t4 = Turtle(tf)
t1.setPos(-110, -110)
t2.setPos(-110, 110)
t3.setPos(110, 110)
t4.setPos(110, -110)
t1.speed(-1)
t2.speed(-1)
t3.speed(-1)
t4.speed(-1)    

for i in range(44): 
    drawLine(t1, t2)
    drawLine(t2, t3)
    drawLine(t3, t4)
    drawLine(t4, t1)
    t1.forward(5)
    t2.forward(5)
    t3.forward(5)
    t4.forward(5)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 


Erklärungen zum Programmcode:

drawLine(a, b) zeichnet eine Linie von der aktuellen Position der Turtle a zur aktuellen Position der Turtle b

 


Aufgaben Serie 9

 

1)

Zwei Turtles zeichnen abwechslungsweise Treppenstufen.

 

 

2)

Eine grüne, rote und blaue Turtle zeichnen miteinander die nebenstehenden Figuren

Die Figuren sind aus einem Zick-Zack-Muster aufgebaut

 

 

 

3)

Zwei Turtles zeichnen abwechslungsweise Quadrate. Die erste Turtle mit einer blauen, die zweite Turtle mit einer roten Farbe.

 

4)

Die Quadrate können mit fill(), fillToPoint() oder mit fillToHorizontal() ausgefüllt werden.

   

5)


Die Turtle laura zeichnet (nicht gefüllte) Quadrate. Nach jedem gezeichneten Quadrat springt die zweite Turtle luka hinein und färbt es grün.

Verwende für die beiden Turtles verschiedene Turtlebilder. Im tigerjython.jar stehen die Bilder beetle.gif, beetle1.gif, beetle2.gif und spider.png zur Verfügung. Du kannst aber euch eigene Bilder verwenden. Du musst diese im Unterverzeichnis sprites des Verzeichnisses, in dem sich dein Programm befindet, speichern.