Jython HomeDruckenJava-Online

Mehrere Turtles verwenden


In einem Turtlefenster können mehrere Turtleobjekte erzeugt werden. Bei der bisher verwendeten Turtle handelt es sich um ein anonymes Objekt, für welches man keinen Namen braucht. Wenn man mehrere Turtles gleichzeitig verwenden will, musst man jeder Turtle einen eigenen Namen geben.

joe = Turtle() erzeugt Turtle joe in 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, analog kann mit
luka = Turtle(tf) eine zweite Turtle luka im gleichen TurtleFrame erzeugt werden.

Damit joe einen bestimmten Befehl ausführt, muss der Name joe und ein Punkt vorangestellt werden. Man nennt dies einen Methodenaufruf.

Beispiel 1: Zwei Turtles joe und luka zeichnen Quadrate. Während die eine Turtle ein Quadrat zeichnet, muss die andere warten.


# 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)
 
Ausführen mit Webstart

 

Erklärungen zum Programmcode:

luka ist ein Objekt der Klasse Turtle und kennt damit alle Turtle-Methoden. Mit luka.setColor("red") wird die Methode setColor() für luka aufgerufen.
Mit def square(t) wird die Funktion square() für eine beliebige Turtle t definiert
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, stehen die anderen still (gleichzeitiges Zeichnen 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)
 
Ausführen mit Webstart

 

Beispiel 3: Man kan für jede Turtle ein eigenes Bild verwenden. Der Pfad auf die Bilddatei wird beim Erzeugen der Turtle angegeben. Hier verwendet man die beiden Bilddateien beetle.gif und cuteturtle.gif, die sich in der Distribution tigerjython2.jar befinden. Sie können auch eigene Bilder verwenden. Die Bilddateien müssen im Unterverzeichnis sprites des Verzeichnisses, in dem sich Ihr Programm befindet, gespeichert sein.

# 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)
  Ausführen mit Webstar

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)
 

Ausführen mit Webstart

 

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.