如何为Python turtle库的海龟对象设置移动边界限制?
问题原因
你的代码存在3处核心错误导致限制海龟出界的逻辑不生效:
- 边界判断逻辑完全错误
原判断bobby.xcor() and bobby.ycor() and robby.xcor() and robby.ycor() < 250仅会校验robby的y坐标是否小于250,且要求其余三个坐标不为0,完全不符合「海龟在[-250,250]的正方形区域内」的校验逻辑。同时两个海龟的状态绑定在一起,会导致只要一个海龟出界,另一个正常在区域内的海龟也无法随机移动。 towards()方法使用错误towards(0,0)仅会返回指向坐标(0,0)的角度值,不会直接修改海龟的朝向,需要搭配setheading()方法才能让海龟转向中心。且原逻辑中转向后没有让海龟向前移动,无法实现返回区域的效果。- 矩形填充逻辑错误
原矩形绘制函数把begin_fill()和end_fill()放在了循环内部,会导致逐边填充,填充效果不符合预期。
修正后的完整代码
import turtle import random bobby = turtle.Turtle() robby = turtle.Turtle() bobby.color('blue') robby.color('red') bobby.shape('turtle') robby.shape('turtle') robby.speed(0) bobby.speed(0) def rectangle(x, y, width, height, color): bobby.penup() bobby.goto(x, y) bobby.pendown() bobby.setheading(0) bobby.fillcolor(color) # 填充操作移到循环外,整段绘制完成后再填充 bobby.begin_fill() for i in range(2): bobby.forward(width) bobby.left(90) bobby.forward(height) bobby.left(90) bobby.end_fill() rectangle(-250, -250, 500, 500, 'lightblue') directions = list(range(-45, 45)) forward = list(range(0, 25)) x = list(range(-250, 250)) y = list(range(-250, 250)) def jump(x, y, Aturtle): Aturtle.penup() Aturtle.goto(x, y) Aturtle.pendown() jump(random.choice(x), random.choice(y), bobby) jump(random.choice(x), random.choice(y), robby) def move_random(Aturtle, dir, forw): Aturtle.setheading(Aturtle.heading() + random.choice(dir)) Aturtle.forward(random.choice(forw)) for i in range(250): # 单独判断每个海龟的位置,互不影响 # 处理bobby if -250 <= bobby.xcor() <= 250 and -250 <= bobby.ycor() <= 250: move_random(bobby, directions, forward) else: # 先设置朝向中心,再向前移动 bobby.setheading(bobby.towards(0, 0)) bobby.forward(random.choice(forward)) # 处理robby if -250 <= robby.xcor() <= 250 and -250 <= robby.ycor() <= 250: move_random(robby, directions, forward) else: robby.setheading(robby.towards(0, 0)) robby.forward(random.choice(forward)) turtle.done()
内容的提问来源于stack exchange,提问作者Tompan
相关产品推荐
相关产品推荐

