我正在编写代码以在5只乌龟之间进行比赛。我必须展示谁通过刻度线赢得比赛。我想我可以使用刻度来计算每只乌龟移动所需的时间,然后进行比较。但是,我不知道在代码中将“刻度”放在哪里。这是我的代码:
to finish
ask patches
;sets finish line pattern
[ifelse (pxcor + pycor) mod 2 = 0
;if true do this
[set pcolor pink]
;if false do this
[set pcolor yellow]
]
ask patches
;sets background black other than the finish line
[if pxcor < 12 [set pcolor black]
]
end
to lanes
ask patches
;sets the lanes
[ if pycor = 3 and pxcor < 12 [set pcolor white]
if pycor = 9 and pxcor < 12 [set pcolor white]
if pycor = -3 and pxcor < 12 [set pcolor white]
if pycor = -9 and pxcor < 12 [set pcolor white] ]
;setup for the turtle positions
cro 5
ask turtle 0 [setxy -15 0]
ask turtle 1 [setxy -15 6]
ask turtle 2 [setxy -15 12]
ask turtle 3 [setxy -15 -6]
ask turtle 4 [setxy -15 -12]
ask turtles [set heading 90] ;set heading 90 means moving the head of the turtle right 90 degrees
reset-ticks
end
to setup
finish
lanes
end
to movecars
every .1
[fd random 10 / 10]
end
to endrace
movecars
if xcor >= 12 [die]
end
to go
endrace
end
答案 0 :(得分:1)
tick
几乎总是作为go过程中的最后一条命令。当然,这是您刚接触NetLogo时应该做的。话虽如此,它不会使您的代码正常工作。
将滴答作为时间步长计数器。转到过程的每个循环都应执行需要一个时间步长才能完成的所有动作,并增加时间步长计数器。因此,您不需要every
命令,只需通过go过程调用movecars过程,并在movecars过程中使用ask turtles [forward random 10 / 10]
。
这是一个相当基本的概念上的空白,我建议您仔细研究NetLogo模型库中的某些模型,重点是go过程与移动过程之间的联系以及时间的流逝。或者也许再做一次教程。另外,更简单地启动模型。只需制造一辆汽车并使其动起来,然后再担心多辆汽车,颜色和看谁获胜。在添加下一个模型之前,先添加一小部分模型并使其起作用。
尝试一下:
to go
movecars
endrace
tick
end
to movecars
ask turtles [ fd random 10 / 10]
end
to endrace
ask turtles [ if xcor >= 12 [die] ]
end