<p>这段代码似乎比实际编程更像是一厢情愿:</p>
<pre><code>def is_collided_with(self, run):
return self.rect.colliderect(run.rect)
runner = run(10, 10, 'my_run')
follower = follow(20, 10)
if follow.is_collided_with(run):
print 'collision!'
</code></pre>
<p>海龟没有<code>.rect()</code>方法。不能简单地用这个<code>def</code>语句将<code>is_collided_with()</code>方法添加到现有类中。没有<code>run()</code>和<code>follow()</code>功能。这个碰撞测试只在每次运动后需要时执行一次。让我们努力挽救我们所能做的并使之发挥作用:</p>
<pre><code>from turtle import Turtle, Screen
playGround = Screen()
playGround.screensize(250, 250)
playGround.title("Turtle Keys")
run = Turtle("turtle")
run.color("blue")
run.penup()
run.setposition(250, 250)
follow = Turtle("turtle")
follow.color("red")
follow.penup()
follow.setposition(-250, -250)
def k1():
run.forward(45)
def k2():
run.left(45)
def k3():
run.right(45)
def k4():
run.backward(45)
def quitThis():
playGround.bye()
def is_collided_with(a, b):
return abs(a.xcor() - b.xcor()) < 10 and abs(a.ycor() - b.ycor()) < 10
def follow_runner():
follow.setheading(follow.towards(run))
follow.forward(min(follow.distance(run), 8))
if is_collided_with(follow, run):
print('Collision!')
quitThis()
else:
playGround.ontimer(follow_runner, 10)
playGround.onkey(k1, "Up") # the up arrow key
playGround.onkey(k2, "Left") # the left arrow key
playGround.onkey(k3, "Right") # you get it!
playGround.onkey(k4, "Down")
playGround.listen()
follow_runner()
playGround.mainloop()
</code></pre>
<p>我使用10作为基于海龟光标大小的碰撞半径,可以根据需要进行调整。这段代码简单地结束了游戏,并显示了一条消息,当发生冲突时,您可能需要做一些更复杂的事情。你可以考虑让碰撞逻辑成为它自己的函数,在每次按键后使用,以防跑步者意外地撞到跟随者!</p>