1

課題に netlogo を使用して、コネクト フォー ゲームの作成に取り組んでいます。赤または青がいくつ連続しているかを追跡するのに苦労しています。(勝者を決定する)

これは私がやりたいことのほとんどです:

この円が赤の場合は、連続する円に 1 を追加します。そうでない場合は、連続する赤を 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 プログラムを使用していません。また、neighbors と turtles-on を使用してみましたが、タートルが尋ねる色と同じ色であるかどうかをタートルに尋ねる方法が見つかりません。

どんな助けでも大歓迎です。ありがとう

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

...パッチが勝利シーケンスの極みであるかどうかを教えてくれます。

理解できない限り、そのコードを使用しないでください。mapand を使用n-valuesすると、そのスタイルに慣れていない場合、おそらく少し難しくなりますが、コメントで気軽に質問してください。回答を更新して対処します。

ボーナス ポイント:これは赤の勝利のみをチェックします。これを一般化して、単純にコードを複製することなく、別の色をチェックできるようにします。

于 2012-12-04T04:23:52.630 に答える