如何使用hide / showturtle在Python中创建一个红绿灯机器?

时间:2016-12-03 03:22:12

标签: python python-3.x timer turtle-graphics

我有一个程序使用ontimer功能将Turtle图形红绿灯中的颜色从绿色变为黄色再变为红色。这是完整的程序:

import turtle           

turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess becomes a traffic light!")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()


def draw_housing():
""" Draw a nice housing to hold the traffic lights """
   tess.pensize(3)
   tess.color("black", "darkgrey")
   tess.begin_fill()
   tess.forward(80)
   tess.left(90)
   tess.forward(200)
   tess.circle(40, 180)
   tess.forward(200)
   tess.left(90)
   tess.end_fill()


draw_housing()

tess.penup()

tess.forward(40)
tess.left(90)
tess.forward(50)

tess.shape("circle")
tess.shapesize(3)
tess.fillcolor("green")


state_num = 0


def advance_state_machine():
    global state_num
    wn.ontimer(advance_state_machine, 2000)  
    if state_num == 0:       
        tess.forward(70)
        tess.fillcolor("orange")
    state_num = 1
elif state_num == 1:     
    tess.forward(70)
    tess.fillcolor("red")
    state_num = 2
else:                    
    tess.back(140)
    tess.fillcolor("green")
    state_num = 0


advance_state_machine() 
wn.mainloop()

但是,现在,我想做的事情基本相同,但是使用hideturtleshowturtle。我完全摆脱了advance_state_machine功能。取而代之的是,在draw_housing()之后开始:

tess.penup()
tess.hideturtle()

green = turtle.Turtle()
green.pu()
green.forward(40)
green.left(90)
green.forward(50)
green.shape("circle")
green.shapesize(3)
green.fillcolor("green")

yellow = turtle.Turtle()
yellow.pu()
yellow.forward(40)
yellow.left(90)
yellow.forward(50)
yellow.shape("circle")
yellow.shapesize(3)
yellow.forward(70)
yellow.fillcolor("orange")

red = turtle.Turtle()
red.pu()
red.forward(40)
red.left(90)
red.forward(190)
red.shape("circle")
red.shapesize(3)
red.fillcolor("red")

基本上,我试图创建一种方法来循环隐藏并单独显示每只乌龟来模仿我的第一个程序。我可以手写代码来隐藏并将定时器上的每只乌龟显示为无限远,但我宁愿它自己继续!此外,是否有任何简单的方法使它成为当一个灯是" on"时,另外两个是" off",表示为更暗/灰色的颜色,而不是乌龟完全消失了?在此先感谢您的帮助/建议。

0 个答案:

没有答案