如何同时移动乌龟,如何避免乌龟相撞? [英] How to move turtles at the same time and how to avoid collision of turtles?

查看:0
本文介绍了如何同时移动乌龟,如何避免乌龟相撞?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用海龟来表示一个道路交叉口。要做到这一点,我需要同时从不同的方向移动车辆(海龟)。我发现可以使用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可以用来避免冲突,但我实际上不知道如何导入和使用它。

推荐答案

突然修复您的代码是很困难的,但如果您想要移动不碰撞的乌龟,例如,您也可以使用以下代码,它让乌龟检查转发状态,如果它是空闲的小区,则使用您选择的变量将其设置为1等,例如,在本例中为[set OKGo 1]。在下面的ASK语句中,如果OKGo变量的状态为1,则可以告诉他们继续[前进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

这篇关于如何同时移动乌龟,如何避免乌龟相撞?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆