0

こんにちは、次のコードがあります。

        to go
            move
            play-papelvstije
            play-papelvsrock
            play-tijevsrock
            play-tijevspapel
            play-rockvspapel
            play-rockvstije
        end


        to play-rockvspapel
            ask turtles with [color = red]
                [
                let nearby other turtles in-radius 1
                if any? nearby with [color = green]
                [
                set color green 
                ]
                ]
        end

        to play-papelvstije 
            ask turtles with [color = green]
            [
            let nearby other turtles in-radius 1
            if any? nearby with [color = blue]
            [
            set color blue  
            ]
            ]
        end

       to play-tijevsrock
            ask turtles with [color = blue]
            [ 
            let nearby other turtles in-radius 1
            if any? nearby with [color = red]
            [
            set color red  
            ] 
            ]
        end

        to play-rockvstije
            ask turtles with [color = red]
            [
            let nearby other turtles in-radius 1
            if any? nearby with [color = blue]
            [
            set color red 
            ]
            ]
            end

        to play-papelvsrock
            ask turtles with [color = green]
            [
            let nearby other turtles in-radius 1
            if any? nearby with [color = red]
            [
            set color green 
            ]
            ]
        end

        to play-tijevspapel
            ask turtles with [color = blue]
            [
            let nearby other turtles in-radius 1
            if any? nearby with [color = green]
            [
            set color blue
            ]
            ]
        end

ご覧のとおり、このプロシージャを play-papelvstije play-papelvsrock play-tijevsrock、play-tijevspapel、play-rockvspapel、play-rockvstije をこの正確な順序で実行したため、シミュレーションを実行すると、結果に傾斜が生じます。実行する最初のコマンドは、最終的に人口が増加するコマンドであるため、この手順を実行する方法を見つけますが、コマンドは 1 つだけです。「foreach」コマンドと「map」コマンドを試してみましたが、結果が得られませんでした。アニーの提案はありますか?

4

1 に答える 1

1

1つの解決策は、青いタートルに直接尋ねるのではなく、すべてのタートルに尋ねることです...次のようなものです

to setup
  clear-all
  create-turtles 100 [
   set color red
   setxy random-pxcor random-pycor
  ]
  ask n-of 10 turtles [
   set color green 
  ]
  ask n-of 10 turtles with [color = red][
   set color blue 
  ]


  reset-ticks
end

to go
  move
  changeColor
  tick
end

to move
  ask turtles [
    rt random-float 90
    lt random-float 90
    fd 1
  ]
end

to changeColor
  ask turtles [
    let mycolor color
    let nearby other turtles in-radius 1
    if mycolor = blue [
       if any? nearby with [color = green]
        [
          set color blue
        ]
       if any? nearby with [color = red]
        [
          set color red  
        ]  
    ]
    if mycolor = green [
       if any? nearby with [color = red]
        [
          set color green 
        ]
       if any? nearby with [color = blue]
        [
          set color blue  
        ]
    ]
    if mycolor = red [
       if any? nearby with [color = red][
        if any? nearby with [color = blue]
        [
          set color red 
        ]
        if any? nearby with [color = green]
        [
          set color green 
        ]
       ]
    ]
  ]
end
于 2015-02-25T08:53:45.233 に答える