如何同时移动海龟以及如何避免海龟碰撞?

2024-05-14 15:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用海龟来表示一个十字路口。为此,我需要同时从不同方向移动车辆(海龟)。我发现ontimer()方法可以使用,但在我的例子中似乎不起作用。这是密码

  dist_1 = random.randint(5,15)
  length_1 = 0
  while length_1<1:  
    for i in range(3):
      for j in range(3):
        vehicles_1[i][j].speed(0)
        vehicles_1[i][j].forward(dist_1)
        length_1 = vehicles_1[i][j].xcor()

  time.sleep(5)
  while length_1<200:  
    for i in range(3):
      for j in range(3):
        vehicles_1[i][j].forward(dist_1)
        length_1 = vehicles_1[i][j].xcor()
  screen.ontimer(Moving_vehicles_1, 100)

def Moving_vehicles_2(vehicles_2):
  dist_2 = random.randint(5,15)
  length_2 = 0
  while length_2>80:  
    for i in range(3):
      for j in range(3):
        vehicles_2[i][j].speed(0)
        vehicles_2[i][j].forward(dist_2)
        length_2 = vehicles_2[i][j].ycor()

  time.sleep(5)
  while length_2>-150:  
    for i in range(3):
      for j in range(3):
        vehicles_2[i][j].forward(dist_2)
        length_2 = vehicles_2[i][j].ycor()
  screen.ontimer(Moving_vehicles_2, 100)

所以基本上我在创造两套车辆。他们应该移动一定距离,停一会儿,然后再开始移动。这应该同时发生

我还需要避免海龟的碰撞。如果你想知道怎么做,请提一下

请提供您知道的任何解决方案或源链接。提前谢谢

编辑1:我知道NetLogo可以用来避免冲突,但我实际上不知道如何导入和使用它


Tags: infordistrangerandomlengthforwardspeed
1条回答
网友
1楼 · 发布于 2024-05-14 15:46:01

很难突然修复您的代码,但是如果您想移动不发生碰撞的乌龟,例如,您也可以使用以下代码,让乌龟检查前进状态,如果它是空单元格,然后使用您选择的变量将其设置为1等,例如在本例中[设置okgo 1]。在下面的ask语句中,如果okgo变量的状态为1,您可以告诉他们转到[forward 1]。必须每周一次执行此程序

globals [okgo]
;omit

to go
  ask turtles with [xcor < max-pxcor][
    ifelse not any? turtles-on patch-ahead 1
      [set okgo 1]
    [set okgo 0]
  ]

;omit

  ask turtles [if okgo = 1 ;
    [if not any? turtles-on patch-ahead 1
      [forward 1]
  ]]
end

相关问题 更多 >

    热门问题