2017-11-06 3 views
0

Ich möchte ein Turtle-gezeichnetes Objekt verschieben, aber ich kann keine heruntergeladenen Module verwenden (aus Gründen, auf die ich nicht eingehen möchte). Wie würde ich das tun?Wie verschiebe ich ein gezeichnetes Turtle-Grafik-Objekt mit nur eingebauten Funktionen?

+0

Muss es Schildkröte verwenden? Weil die anderen eingebauten GUI-Module Objekte millionenfach einfacher bewegen können. – Kevin

+0

Leider ja, es muss Schildkröte sein. (Es ist ein Schulprojekt, und mein Lehrer beschränkt uns auf Schildkröten). –

+0

Wenn Sie die grafische Zeichnung korrekt nur mit Befehlen ausführen, die sich auf die aktuelle Position beziehen, können Sie alle in eine Funktion einfügen und positionieren Sie die Schildkröte unmittelbar vor dem Aufruf an der Stelle, an der sie alle relativ sein sollen. – martineau

Antwort

0

Ich stimme @ Martineaus Kommentar im Allgemeinen:

Wenn Sie die grafische Zeichnung tun richtig nur Befehle, die auf die aktuelle Position relativ sind, Sie alle von ihnen in einer Funktion setzen und einfach Bevor Sie es aufrufen, positionieren Sie die Schildkröte auf die Position , in der sie alle relativ sein sollen.

Aber wenn Ihre Zeichnung ausreichend einfach ist, gibt es einen alternativen Ansatz. Sie können einen Turtle-Cursor setzen, der ist Ihre Zeichnung, schalten Sie die Schildkröte auf diesen Cursor und machen Sie Ihre Zeichnung jede Bewegung, die der Turtle-Cursor selbst tun kann.

Ich werde von dieser An Hour of Code == An Hour of Fun Zeichnung Seite mit diesem Haus zu veranschaulichen:

enter image description here

Der folgende Code zeichnet unsichtbar das Haus und verstaut es als Schildkröte Cursor. Es setzt dann die Schildkrötenform auf die Hauszeichnung und nimmt das Haus für eine Drehung. Buchstäblich. Nach dem Drehen des Hauses in einem Kreis, schert es sie, während sie an der oberen rechten Seite der Zeichnung bewegt:

from turtle import Turtle, Screen, Shape 

screen = Screen() 
screen.bgcolor('SkyBlue') 

shape = Shape('compound') 

turtle = Turtle(visible=False) 
turtle.speed('fastest') 
turtle.penup() 

turtle.goto(-100, 0) 

turtle.begin_poly() 
turtle.goto(-100, 50) 
turtle.goto(100, 50) 
turtle.goto(100, 0) 
turtle.goto(-100, 0) 
turtle.end_poly() 
shape.addcomponent(turtle.get_poly(), 'red') 

turtle.goto(-100, 50) 

turtle.begin_poly() 
turtle.goto(0, 100) 
turtle.goto(100, 50) 
turtle.goto(-100, 50) 
turtle.end_poly() 
shape.addcomponent(turtle.get_poly(), 'brown') 

turtle.goto(-40, 0) 

turtle.begin_poly() 
turtle.goto(-40, 30) 
turtle.goto(-20, 30) 
turtle.goto(-20, 0) 
turtle.goto(-40, 0) 
turtle.end_poly() 
shape.addcomponent(turtle.get_poly(), 'orange') 

turtle.goto(20, 20) 

turtle.begin_poly() 
turtle.goto(20, 40) 
turtle.goto(50, 40) 
turtle.goto(50, 20) 
turtle.goto(20, 20) 
turtle.end_poly() 
shape.addcomponent(turtle.get_poly(), 'white') 

screen.register_shape('house', shape) 

turtle.reset() 
turtle.penup() 

# Now we can move our house in any manner that we move a turtle: 

turtle.shape('house') 

for theta in range(0, 360, 10): 
    turtle.setheading(theta) 

turtle.setheading(90) 
turtle.shearfactor(0.5) 
turtle.goto(300, 300) 
turtle.shearfactor(0) 

screen.mainloop() 

Auch dieser Ansatz funktioniert nur für einfache Zeichnungen von gefüllten Polygonen zusammengesetzt.

Verwandte Themen