如何在Python中为乌龟添加位置条件?

时间:2019-01-21 20:16:52

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

我要添加一个条件,如果比赛中的任何海龟都越过终点线或指定位置,循环将自动在此处结束。这是一个竞赛程序,其中有4只海龟赛跑,轮流移动任意距离。所以我想要一个代码,一旦其中一只乌龟到达最后一行,我就可以结束转弯循环。我尝试在while循环中使用它,但是效果不佳。我希望有人可以修复我的代码。

这里是我的代码::::

from turtle import *

from random import randint

from turtle import position

penup ()
speed (10)
goto (-140, 125)

for step in range (11) :
  write (step, align = "center")
  right (90)
  forward (10)
  pendown ()
  forward (150)
  penup ()
  backward (160)
  left (90)
  forward (20)

aaa = Turtle()
aaa.color ("red")
aaa.shape ("turtle")
aaa.penup ()
aaa.goto (-150, 100)
aaa.pendown ()

bbb = Turtle()
bbb.color ("blue")
bbb.shape ("turtle")
bbb.penup ()
bbb.goto (-150, 60)
bbb.pendown ()

ccc = Turtle()
ccc.color ("yellow")
ccc.shape ("turtle")
ccc.penup ()
ccc.goto (-150, 20)
ccc.pendown ()

ddd = Turtle()
ddd.color ("green")
ddd.shape ("turtle")
ddd.penup ()
ddd.goto (-150, -20)
ddd.pendown ()

for turn in range (1) :
  aaa.right(360)
  bbb.left(360)
  ccc.right(360)
  ddd.left(360)

for turn in range (70) :
  aaa.forward(randint(1, 5))
  bbb.forward(randint(1, 5))
  ccc.forward(randint(1, 5))
  ddd.forward(randint(1, 5))

1 个答案:

答案 0 :(得分:0)

这个问题比乍看起来似乎更有趣,因为其中有一个相当琐碎而又涉及更多的部分。

  

我想要一个能让乌龟之一撞到最后一行时结束转弯循环的代码。

由于终点线是for step in range (11) :循环中绘制的最后一行,因此我们可以简单地存储绘制线条时乌龟的x坐标(由.xcor()返回)并在获得之后获得最后一行的位置。循环:

for step in range(11):
  …
  finish = xcor()   # remember where line has been drawn
  forward(20)

其中一只乌龟到达终点线意味着至少一只乌龟的x坐标到达finish;在这种情况下,我们不需要假定最大匝数,可以使用while代替for循环:

while max(aaa.xcor(), bbb.xcor(), ccc.xcor(), ddd.xcor()) < finish:
  aaa.forward(randint(1, 5))
  bbb.forward(randint(1, 5))
  ccc.forward(randint(1, 5))
  ddd.forward(randint(1, 5))

但是现在,当我们看比赛结束时的照片时,我们看到了获胜的乌龟已经越过终点并使其身体中心(因为身体中心被视为乌龟的位置),尽管只要乌龟的头撞到终点线,它就应该取胜。因此,为了正确起见,我们必须调整finish的值以说明头部相对于中心的超前。为此,我们可以使用.get_shapepoly()来返回当前形状多边形作为坐标对元组,例如e。 g。

((0, 16), (-2, 14), (-1, 10), (-4, 7), (-7, 9), (-9, 8), (-6, 5), (-7, 1), (-5, -3), (-8, -6), (-6, -8), (-4, -5), (0, -7), (4, -5), (6, -8), (8, -6), (5, -3), (7, 1), (6, 5), (9, 8), (7, 9), (4, 7), (1, 10), (2, 14))

形状的中心位于(0,0),并且返回的多边形始终具有相同的方向,在乌龟的情况下,头部朝上,因此我们需要将最大y坐标放置在转环

# adjust the finish line position for the turtle's head rather than its center
finish -= max([y for x, y in aaa.get_shapepoly()])  # y as head points upwards