与实际编程相比,这段代码似乎更让人想不到:
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!'
乌龟没有
.rect()方法。您不能
is_collided_with()使用此
def语句简单地将方法添加到现有类。没有
run()和
follow()功能。每次运动后,如果需要,该碰撞测试将只执行一次。让我们尝试挽救我们可以做的工作:
from turtle import Turtle, ScreenplayGround = 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()) < 10def 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 keyplayGround.onkey(k2, "Left") # the left arrow keyplayGround.onkey(k3, "Right") # you get it!playGround.onkey(k4, "Down")playGround.listen()follow_runner()playGround.mainloop()我根据乌龟光标的大小使用10作为碰撞半径,可以根据需要进行调整。该代码只是在游戏结束时给出一条消息,当发生碰撞时,您可能想做一些更复杂的事情。您可以考虑将碰撞逻辑设为自己的功能,以便在每次击键后使用,以防跑步者不小心撞到跟随者!



