我正在使用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程序的方法。 我也尝试过使用邻居和乌龟,如果他们的颜色与海龟的颜色相同,也无法找到一种方法让乌龟问他们的邻居龟。
任何帮助将不胜感激。 感谢
答案 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?]
...会告诉你是否有任何补丁是获胜序列的极限。
现在你不应该使用该代码,除非你理解它。使用map
和n-values
可能会让你有点挑战,如果你不习惯那种风格,但随意在评论中提问,我会更新我的答案来解决它们。
加分:这只会检查红色胜利。概括这一点,以便它可以检查另一种颜色,而不必天真地复制代码。