微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

蟒龟赛跑:走到一个点就折回

如何解决蟒龟赛跑:走到一个点就折回

嗨,我还有一个问题:如何让乌龟到达某个点然后返回?我希望海龟到达 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()

enter image description here

您的 while True: 并不真正属于像乌龟这样的事件驱动环境,可以用 ontimer() 事件替换。但是,一点一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。