使用turtle库制作海龟赛跑程序:海龟转向位置异常求助
海龟赛跑程序中海龟转向位置不一致的问题
我尝试使用turtle库制作一个海龟赛跑程序,但发现每次启动程序时,海龟转向的位置都不相同。以下是我的代码:
from turtle import Turtle from random import randint #creation of turtles Ivo = Turtle() Ivo.color("blue") Ivo.shape("turtle") Rirriuk = Turtle() Rirriuk.color("yellow") Rirriuk.shape("turtle") Laura = Turtle() Laura.color("red") Laura.shape("turtle") Ivo.penup() Ivo.goto(-130, 22) Ivo.pendown() Ivo.pendown() Rirriuk.penup() Rirriuk.goto(-130,42) Rirriuk.pendown() Laura.penup() Laura.goto(-130, 62) Laura.pendown() #random movement generator for movement in range(100): Ivo.forward(randint(1, 5)) Rirriuk.forward(randint(1, 5)) Laura.forward(randint(1,5)) Ivo.right(180) Rirriuk.right(180) Laura.right(180) for movement in range(50): Ivo.forward(randint(1, 5)) Rirriuk.forward(randint(1,5)) Laura.forward(randint(1,5))
问题原因与解决方法
问题出在你用固定次数的循环控制海龟前进:每只海龟每次前进的步数是randint(1,5)生成的随机值,100次循环后,每只海龟的总前进距离完全随机,所以转向时的位置自然每次都不一样。
要让海龟在固定位置转向,有两种可行思路:
- 设定固定的转向坐标,检测海龟是否到达该位置,到达后再执行转向
- 让海龟前进固定的总距离(而非固定循环次数),确保转向时的位置一致
方案1:固定转向坐标(推荐)
以下是修改后的代码,让所有海龟前进到x=130的位置后再统一转向,既保留赛跑的随机性,又能保证转向位置固定:
from turtle import Turtle from random import randint # 创建海龟 Ivo = Turtle() Ivo.color("blue") Ivo.shape("turtle") Rirriuk = Turtle() Rirriuk.color("yellow") Rirriuk.shape("turtle") Laura = Turtle() Laura.color("red") Laura.shape("turtle") # 设置初始位置 Ivo.penup() Ivo.goto(-130, 22) Ivo.pendown() Rirriuk.penup() Rirriuk.goto(-130, 42) Rirriuk.pendown() Laura.penup() Laura.goto(-130, 62) Laura.pendown() # 设定转向的x坐标 turn_x = 130 # 前进到指定位置再转向 while Ivo.xcor() < turn_x or Rirriuk.xcor() < turn_x or Laura.xcor() < turn_x: if Ivo.xcor() < turn_x: Ivo.forward(randint(1, 5)) if Rirriuk.xcor() < turn_x: Rirriuk.forward(randint(1, 5)) if Laura.xcor() < turn_x: Laura.forward(randint(1, 5)) # 统一转向 Ivo.right(180) Rirriuk.right(180) Laura.right(180) # 返回初始方向区域 while Ivo.xcor() > -130 or Rirriuk.xcor() > -130 or Laura.xcor() > -130: if Ivo.xcor() > -130: Ivo.forward(randint(1, 5)) if Rirriuk.xcor() > -130: Rirriuk.forward(randint(1, 5)) if Laura.xcor() > -130: Laura.forward(randint(1, 5))
方案2:固定总前进距离
如果你想保留循环逻辑,可以控制每只海龟的总前进距离固定(比如将每次前进的步数改为固定值,或者计算随机步数的总和),但这种方式会削弱赛跑的随机性,因此更推荐第一种方案。
内容的提问来源于stack exchange,提问作者S. Tack
相关产品推荐
相关产品推荐

