我试图给海龟分配一个我可以告诉他们按顺序移动的数字。使用以前的帖子和一些常规游戏,我设法创建了海龟的排名顺序列表,但现在我想根据他们在该列表中的相对位置为海龟分配一个数字。
实施例: 当前列表:[(龟8)(龟1)(龟9)(龟0)] 所需的海龟名称:乌龟8 = 1,乌龟1 = 2,乌龟9 = 3等
到目前为止,我已经达成了:
globals [rank_list]
turtles-own [var.
rank]
set rank_list sort-on [var.] turtles
create-turtles (50)
[setxy (random-float max-pxcor) (random-float max-pycor)
set var. random-normal 0.5 0.175
if var. > 1 [set sociability 0.99999999]
if var. < 0 [set sociability 0.00000001]
foreach rank_list ask ? [set rank ... ;this is where I get stumped
to go
ask turtles [foreach rank [ask ? [move]]]
end
根据列表中的排名顺序分配值的任何提示都将非常感谢!
答案 0 :(得分:2)
您可以使用n-values
生成排名和foreach
的可变版本,以同时遍历rank-list
和排名:
turtles-own [ var rank ]
to setup
clear-all
create-turtles 50 [
setxy random-pxcor random-pycor
set var random-normal 0.5 0.175
]
let rank-list sort-on [ var ] turtles
let ranks n-values length rank-list [ ? ]
(foreach rank-list ranks [ ask ?1 [ set rank ?2 ] ])
end
但问题是:你真的需要rank
变量吗?为什么不直接使用rank-list
:
foreach rank-lisk [ ask ? [ move ] ]
或者甚至只是每次var
对你的海龟进行分类:
foreach (sort-on [ var ] turtles) [ ask ? [ move ] ]
后者不是最有效的,但是如果你只有50只海龟,每蜱只做一次,你就永远不会注意到它们之间的区别。
答案 1 :(得分:0)
使用Nicolas&#39;回答上面我实现了目标或排序顺序运动。对于我工作的2000只海龟来说,它仍然有点处理能力,但至少它会运行!
turtles-own [var]
to ranking
let rank-list sort-on [var] turtles
let ranks n-values length rank-list [ ? ]
(foreach rank-list ranks [ask ?1 [set var ?2] ] )
end
to make_turtles
create-turtles (5)
[set var random-normal 0.5 0.2
set color scale-color blue var 0 1
set size 3]
ranking
ask turtles [set label var]
end
to move
let rank-list sort-on [var] turtles
ask turtles [foreach rank-list [ask ? [ forward random 9]]]
end
to setup
clear-all
make_turtles
end
to go
move
end