netlogo 2中的动态海龟创建[续...]

时间:2016-01-10 21:07:38

标签: dynamic netlogo

在界面选项卡中,我有一个滑块,其值介于2和2之间。 10.根据用户使用此滑块定义的值,应创建多个海龟。

我尝试使用多个if语句,但后续步骤存在问题。

if (slider-value = 2) [create2] 
if (slider-value = 3) [create3] 
if (slider-value = 4) [create4] 
if (slider-value = 5) [create5]

使用上述if条件创建海龟之后,我必须为每个单独的乌龟分配额外的规则,如坐标位置,他们应该如何移动的规则等等,我再次尝试使用多个if语句。但它似乎没有用。

例如,create的子查询如下

to create2
  create-challengers 2
  ask turtle 0 [set color blue set label-color blue set size 2 
                set xcor party1-left-right ]
  ask turtle 1 [set color red set label-color red set size 2 
                set xcor party2-left-right ]

  ask turtles [ update-rule set old-mysize 0 set shape "default"]

end

用于创建3只龟:

to create3
  create-challengers 3
  ask turtle 0 [set color blue set label-color blue set size 2 
                set xcor party1-left-right ]
  ask turtle 1 [set color red set label-color red set size 2 
                set xcor party2-left-right ]
  ask turtle 2 [set color green set label-color green set size 2 
               set xcor party3-left-right ]

  ask turtles [ update-rule set old-mysize 0 set shape "default"]

end

等等。

主要问题是即使程序工作而不管用户定义了多少只乌龟,所有10只被创建但只有用户定义的海龟数量移动,即如果用户已经确定3,那么当我运行程序10只乌龟已创建,但只有3次移动。

有没有办法像在其他编程语言中一样,只需使用if-else语句。

有人可以建议一种方式,真的很感激帮助。

提前致谢!

创建海龟后,我指定了一些规则供他们移动:

to update-rule  
  if (slider-values = 2) [update2]
  if (slider-values = 3) [update3]
  if (slider-values = 4) [update4]
  if (slider-values = 5) [update5]
end

我再一次为update2创建了多个子规则,update3基本上针对每只乌龟,具体取决于用户定义的数量:

如果有2只乌龟:

to update2 
  ask turtle 0 [set my-rule party1-rule] 
  ask turtle 1 [set my-rule party2-rule]
end

如果是3只乌龟:

to update3
  ask turtle 0 [set my-rule party1-rule] 
  ask turtle 1 [set my-rule party2-rule]
  ask turtle 2 [set my-rule party3-rule] 
end

以下是移动规则

to adapt
  if (my-rule = "hunter") [hunt]
  ;;NB stickers do nothing
  if (my-rule = "aggregator") [aggregate]

end


to hunt                 
  ifelse (mysize > old-mysize) [jump 1] [set heading heading + 90 + random-float 180 jump 1]
  set old-mysize mysize 
end

to run-general
  create2 create3 create4 create5 create-voters update-support
  ask challengers [adapt] update-support

end

to go
  run-general

  tick

end

3 个答案:

答案 0 :(得分:4)

正如Seth所指出的,问题可能出在代码的to setup-challengers create-challengers 1 [set color blue set label-color blue set size 2 set xcor party1-left-right ] create-challengers 1 [set color red set label-color red set size 2 set xcor party2-left-right ] if slider-value >= 3 [ create-challengers 1 [ set color green set label-color green set size 2 set xcor party3-left-right ] ] if slider-value >= 4 [ create-challengers 1 [ <whatever you want number 4 to look like> ] ] ask challengers [<do stuff>] end 部分,因为海龟正在创建。正如一般评论一样,看起来你创建3只海龟的代码与创建2只海龟的代码相同,除了额外的海龟。如果这通常是正确的,那么如果您使用以下格式,则代码会更容易:

DataFrame

这样你只需要为每只乌龟编写一次代码,这样如果你改变了对颜色或其他东西的看法,就会更容易改变。

答案 1 :(得分:1)

好的,尝试编辑代码如下:

to adapt
  type "Hunters: " print count turtles with [my-rule = "hunter"]
  type "Aggregators: " print count turtles with [my-rule = "aggregator"]
  if (my-rule = "hunter") [hunt]
  if (my-rule = "aggregator") [aggregate]
end

这是一个标准的调试技巧。它会将猎人和聚合器的数量打印到命令中心(界面选项卡的底部)。这允许您找出代码出错的地方。例如,在您的情况下,它会告诉您问题是移动代码还是使用将规则分配给海龟的代码。

如果您不确定是否已达到某个程序,那么另一个诀窍就是print "Got to hunt procedure"之类的东西。

答案 2 :(得分:0)

这个基于滑块的设置的其他东西看起来很讨厌。

另一种方法是为每个人单独设置的所有属性都有一组(全局)列表。 那么你可以使用以下代码

AppDelegate *appDelegate =(AppDelegate *)[[UIApplication sharedApplication]delegate];
NSArray *subViewArray = [appDelegate.window subviews];
for (id obj in subViewArray)
          {
            [obj removeFromSuperview];
          }

那么你只需要确保每只海龟在被要求做某事时都知道该做什么

Geerten