如何使用netlogo计算上方,下方和对角线的海龟?

时间:2012-12-03 23:16:55

标签: netlogo

我正在使用netlogo为作业创建一个连接四游戏。我无法跟踪连续多少个红色或蓝色。 (确定获胜者)

这就是我想要它做的事情:

如果这个圆圈是红色的          然后将一个添加到连续的圆圈       其他          将连续的红色设置为0       如果连续的红色是4(或更大)          告诉你赢得好友/加仑       否则设置连续红色0

这是我尝试过但不起作用的。

ifelse any? patches with [ (pcolor = red) and (pxcor 1)]
    [set successive-reds = successive-reds + 1]
    [set successive-reds 0]
    if successive-reds = 4
       [show "you won"]

我已经搜索了stackoverflow以寻求帮助,并找到了这样做但不使用netlogo程序的方法。 我也尝试过使用邻居和乌龟,如果他们的颜色与海龟的颜色相同,也无法找到一种方法让乌龟问他们的邻居龟。

任何帮助将不胜感激。 感谢

1 个答案:

答案 0 :(得分:1)

唉...我知道,因为这是一个任务,我应该温柔地引导你自己搞清楚如何做到这一点,但这是一个很酷的小问题,NetLogo非常适合,我无法抗拒发布解决方案:

to-report wins? ; patch procedure
  report member? true map wins-in-direction? n-values 8 [ ? * 45 ]
end

to-report wins-in-direction? [ h ] ; patch procedure
  report not member? false map [
    ([ pcolor ] of patch-at-heading-and-distance h ?) = red
  ] (n-values 4 [ ? ])
end

鉴于上述代码,声明如下:

any? patches with [wins?]

...会告诉你是否有任何补丁是获胜序列的极限。

现在你不应该使用该代码,除非你理解它。使用mapn-values可能会让你有点挑战,如果你不习惯那种风格,但随意在评论中提问,我会更新我的答案来解决它们。

加分:这只会检查红色胜利。概括这一点,以便它可以检查另一种颜色,而不必天真地复制代码。