在界面选项卡中,我有一个滑块,其值介于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
答案 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