who
номера присваиваются каждой черепахе , поскольку она создана и не зависит от породы.Таким образом, если вы создадите 10 фуражиров, а затем создадите 10 миноров, ваши фуражиры будут иметь значения who
от 0 до 9, а ваши несовершеннолетние будут иметь who
значения от 10 до 19. По этой причине, какую бы породу вы ни создали в первую очередь (и, следовательно, имеет самый низкий диапазон who
чисел), начнет двигаться в соответствии с вашим if who >= ticks...
кодом.Чтобы ваш код на основе who
делал то, что вам нужно, вам нужно чередовать создание ваших фуражиров и несовершеннолетних.
Однако, как правило, использование чисел who
немного ограничено - вам может быть проще создавать свои собственные переменные или управлять этим другим способом.Например, установка ниже создает nest-patch
в крайнем левом углу мира и перемещает некоторых фуражиров и несовершеннолетних в этот патч.У черепах есть логическая переменная at-nest?
, которую вы можете использовать для управления перемещением черепах:
breed [ foragers forager ]
breed [ minors minor ]
globals [ last-left nest-patch ]
turtles-own [ at-nest? ]
to setup
ca
create-foragers 10 [ set color red ]
create-minors 20 [ set color blue ]
set nest-patch patch min-pxcor 0
ask nest-patch [ set pcolor yellow ]
ask turtles [
move-to nest-patch
set heading 90
set at-nest? true
pd
]
set last-left minors
reset-ticks
end
Изначально для всех черепах at-nest?
установлено значение true.Затем вы можете чередовать представителей каждой породы, для которых вы просите установить at-nest?
на true
.Взгляните на приведенный ниже пример, который содержит более подробную информацию в комментариях:
to go
; If there are any turtles on the nest patch with at-nest? set to true
if any? ( turtles-on nest-patch ) with [ at-nest? ] [
; If both breeds are present on the nest patch, alternate back and forth
; between breeds to set at-nest? to false
ifelse ( length remove-duplicates [breed] of turtles-on nest-patch = 2 ) [
set last-left ifelse-value ( last-left = minors ) [ foragers ] [ minors ]
ask one-of last-left with [ at-nest? ] [
set at-nest? false
]
] [
; Otherwise, just ask one-of whichever breed is left to set at-nest? to false
ask one-of turtles-on nest-patch [
set at-nest? false
]
]
]
; Ask any turtles who have at-nest? set to false to move
ask turtles with [ not at-nest? ] [
if heading != 90 [
rt ifelse-value ( breed = minors ) [ 12 ] [ -12 ]
]
if xcor > 0 and heading = 90 [
rt ifelse-value ( breed = minors ) [ 12 ] [ -12 ]
]
fd 1
]
tick
end
Этот код выводит что-то вроде: