如何解决蟒龟赛跑:走到一个点就折回
嗨,我还有一个问题:如何让乌龟到达某个点然后返回?我希望海龟到达 x 坐标为 160 的点并返回,同时继续比赛(意味着它们不会以相同的速度移动)。
这是我的代码:
import turtle
from random import randint
turtle.speed(0)
turtle.penup()
turtle.goto(-140,140)
for step in range(15):
turtle.write(step,align='center')
turtle.right(90)
turtle.forward(10)
turtle.pendown()
turtle.forward(180)
turtle.penup()
turtle.backward(190)
turtle.left(90)
turtle.forward(20)
roy = turtle.Turtle()
roy.color('red')
roy.shape('turtle')
roy.penup()
roy.goto(-160,100)
roy.pendown()
bob = turtle.Turtle()
bob.color('blue')
bob.shape('turtle')
bob.penup()
bob.goto(-160,70)
bob.pendown()
oreo = turtle.Turtle()
oreo.color('orange')
oreo.shape('turtle')
oreo.penup()
oreo.goto(-160,40)
oreo.pendown()
yay = turtle.Turtle()
yay.color('yellow')
yay.shape('turtle')
yay.penup()
yay.goto(-160,10)
yay.pendown()
go = turtle.Turtle()
go.color('green')
go.shape('turtle')
go.penup()
go.goto(-160,-20)
go.pendown()
for turn in range(100):
roy.forward(randint(1,5))
bob.forward(randint(1,5))
oreo.forward(randint(1,5))
yay.forward(randint(1,5))
go.forward(randint(1,5))
if roy.xcor() >= 160:
roy.left(180)
else:
break
if bob.xcor() >= 160:
bob.left(180)
else:
break
if yay.xcor() >= 160:
yay.left(180)
else:
break
if oreo.xcor() >= 160:
oreo.left(180)
else:
break
if go.xcor() >= 160:
go.left(180)
else:
break
我知道我的“if”循环最后有问题,但我不知道发生了什么。
顺便说一下,我的乌龟变成了 this
感谢帮助!
解决方法
你的 else break
有问题,当第一只乌龟试图转身时,它结束了比赛。此外,如果海龟稍微超出转折点,left(180)
可能会出现问题,因为它会开始旋转。使用 setheading(180)
更安全,因为它会避免旋转并将海龟送回起跑线:
from turtle import Screen,Turtle
from random import randint,choice
screen = Screen()
turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()
turtle.goto(-140,140)
for step in range(15):
turtle.write(step,align='center')
turtle.right(90)
turtle.forward(10)
turtle.pendown()
turtle.forward(180)
turtle.penup()
turtle.backward(190)
turtle.left(90)
turtle.forward(20)
roy = Turtle()
roy.color('red')
roy.shape('turtle')
roy.penup()
roy.goto(-160,100)
roy.pendown()
bob = Turtle()
bob.color('blue')
bob.shape('turtle')
bob.penup()
bob.goto(-160,70)
bob.pendown()
oreo = Turtle()
oreo.color('orange')
oreo.shape('turtle')
oreo.penup()
oreo.goto(-160,40)
oreo.pendown()
yay = Turtle()
yay.color('yellow')
yay.shape('turtle')
yay.penup()
yay.goto(-160,10)
yay.pendown()
go = Turtle()
go.color('green')
go.shape('turtle')
go.penup()
go.goto(-160,-20)
go.pendown()
while True:
racer = choice([roy,bob,oreo,yay,go])
racer.forward(randint(1,5))
if racer.xcor() > 160:
racer.setheading(180)
elif racer.xcor() < -160:
break # we have a winner!
screen.mainloop()
您的 while True:
并不真正属于像乌龟这样的事件驱动环境,可以用 ontimer()
事件替换。但是,一点一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。