1

我正在使用 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 程序。我也尝试过使用邻居和海龟,但找不到一种方法让海龟问他们的邻居海龟它们的颜色是否与海龟问的颜色相同。

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

4

1 回答 1

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?]

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

现在,除非您理解它,否则您不应该使用该代码。如果您不习惯这种风格,使用mapandn-values可能会带来一点挑战,但请随时在评论中提出问题,我会更新我的答案以解决这些问题。

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

于 2012-12-04T04:23:52.630 回答