2016-05-06 9 views
-1

Hier sind meine Code, der Anweisungen aus einer Textdatei verwendet, um ein Bild zu bauen ... die Anweisung zuweisen eine Schildkröte und eine Richtung x und y, zum Beispiel: 1, 100, 100. Verwendet die Schildkröte Nummer eins diese Schildkröte geht x = 100 und y = 100.Build Bild mit Turtle World, Python

from swampy.TurtleWorld import * 
    def draw_to(t,x,y,steps): 

x_diff = x - t.get_x() 
x_step = 1.0*x_diff/steps 
y_diff = y - t.get_y() 
y_step = 1.0*y_diff/steps 
for step in range(steps): 
t.fd(x_step) 
t.lt() 
t.fd(y_step) 
t.rt() 

def process (s,tlist): 
parts = s.split(',') 
t = tlist[int(parts[0])-1] 
x = int(parts[1]) 
y = int(parts[2]) 
draw_to(t,x,y,50) 


fturtles = open('turtles.txt','r') 
instructions = fturtles.readlines() 
fturtles.close() 


world = TurtleWorld() 


turtle_list = [] 
num_turtles = int(instructions[0]) 
for tNum in range(num_turtles): 
new_turtle = Turtle(world) 
new_turtle.set_delay(0.01) 
turtle_list.append(new_turtle) 

for lineNum in range(1,len(instructions)): 
    process(instructions[lineNum],turtle_list) 
    print "just processed", instructions[lineNum] 


wait_for_user() 

der Code funktioniert gut, das Problem ist, ich durch eine Änderung der Farbe des Stifts der Schildkröte, zum Beispiel um die Funktionalität zu verbessern versucht, in der Textdatei, wenn ich setze: 1.100, 100, rot, wird es der Schildkröte sagen, die Farbe Rot zu verwenden. Ich habe versucht, das in einer neuen Funktion zu verwenden, aber ich habe keine Idee, wie man das macht. Wenn jemand mir helfen kann, zu klären, wie das zu tun ist, wird es aprecciated sein.

+1

Bitte beheben Sie die Einrückung in Ihrem Code. Könntest du auch zeigen, was du versucht hast und nicht funktioniert hast? –

+0

ich tat, dass def Farben(): t.set_pen_color(), und versucht, diese Funktion im Prozess Teil hinzufügen, aber das einzige, was ich habe ist: t nicht definiert ist, was seltsam ist, weil t verwendet vorher in der Funktion draw_to –

Antwort

0

Wie wäre Ihre process() Funktion neu zu definieren, wie folgt:

STEPS = 50 
# ... 
def process(instruction, turtle_list): 
    index, x, y, color = instruction.split(',') 
    t = turtle_list[int(index) - 1] 
    t.set_pen_color(color.strip()) 
    draw_to(t, int(x), int(y), STEPS) 

eine einfache turtle.txt Datei verwenden:

3 
1, 100, 100, red 
2, 100, 0, blue 
3, 0, 100, green 

ich:

enter image description here

Meine Nacharbeit Dein Code folgt, beachte aber, dass ich Python 3 und das t benutzt habe Urtle-Modul, das mit ihm kommt, nicht TurtleWorld, aber die meisten Dinge über ziemlich gut abbilden:

import sys 
from turtle import * 

class TurtleWorld(Turtle): 
    """ for Turtle World compatibility """ 

    def set_pen_color(self, *args): 
     return self.pencolor(*args) 

    def get_x(self): return self.xcor() 

    def get_y(self): return self.ycor() 

STEPS = 50 
DELAY = 0 
instruction_filename = sys.argv[1] 

def draw_to(t, x, y, steps): 
    x_diff = x - t.get_x() 
    x_step = x_diff/float(steps) 
    y_diff = y - t.get_y() 
    y_step = y_diff/float(steps) 
    for step in range(steps): 
     t.fd(x_step) 
     t.lt(90) 
     t.fd(y_step) 
     t.rt(90) 

def process(instruction, turtle_list): 
    index, x, y, color = instruction.split(',') 
    t = turtle_list[int(index) - 1] 
    t.set_pen_color(color.strip()) 
    draw_to(t, int(x), int(y), STEPS) 

instruction_file = open(instruction_filename) 
instructions = instruction_file.readlines() 
instruction_file.close() 

turtle_list = [] 
num_turtles = int(instructions[0]) 
for tNum in range(num_turtles): 
    new_turtle = TurtleWorld() 
    turtle_list.append(new_turtle) 
delay(DELAY) 

for instruction in instructions[1:]: 
    process(instruction, turtle_list) 
    print("just processed", instruction) 

exitonclick() 
+0

nur eine Frage .. es ist möglich, den Code spezifischer (zum Beispiel, erhöhen Sie die Geschwindigkeit der Zeichnung) und verwenden Sie einfach die Funktion Prozess, um es zu lesen? –

+0

@CesarHoffmann, die Verzögerung in der Zeichnung scheint die _steps_ zu sein, vielleicht, wenn Sie erklären könnten (in einem neuen Beitrag), warum Sie die Schritte verwenden und nicht nur die Linie zeichnen, die Leuten helfen könnte, Ihnen Vorschläge zu geben. Ja, 'process()' könnte modifiziert werden, um die gesamte Liste von Anweisungen oder sogar die Datei als Argument zu übernehmen und die gesamte Verarbeitung durchzuführen. – cdlane