如何同时移动乌龟,如何避免乌龟相撞? [英] How to move turtles at the same time and how to avoid collision of turtles?
本文介绍了如何同时移动乌龟,如何避免乌龟相撞?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用海龟来表示一个道路交叉口。要做到这一点,我需要同时从不同的方向移动车辆(海龟)。我发现可以使用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屋!
查看全文