Я думаю, что именно линия if (pcolor = blue)
вызывает проблему.Ваши ball
агенты на самом деле никогда не находятся на синем патче, поскольку вы заставляете их оборачиваться, как только они оценивают патч перед ними (используя вашу линию patch-at dx dy
).Таким образом, if (pcolor = blue)
никогда не оценивается как истина, поэтому никаких вспышек не происходит.Это было бы хорошим местом для команды печати для отладки - если вы добавите что-то вроде:
...
if (pcolor = blue)
[
print "making flash"
...
, вы увидите, что этот код на самом деле никогда не обрабатывается.Таким образом, чтобы исправить это, вы должны переоценить, когда вспышки действительно должны произойти - один простой пример, который может работать для вас:
breed [ flashes flash ]
breed [ balls ball ]
flashes-own [ birthday ]
to setup
ca
ask patches with [
member? pxcor list max-pxcor min-pxcor or
member? pycor list max-pycor min-pycor
] [
set pcolor blue
]
create-balls 10
reset-ticks
end
to apply-flash-visualization
set size size + 1
if ticks - birthday > 2 [ die ]
end
to go
ask flashes [ apply-flash-visualization ]
ask balls [
let next patch-ahead 1
ifelse [pcolor] of next = blue [
ask next [
sprout-flashes 1 [
set shape "square"
set color white
set birthday ticks
]
]
rt 180
] [
fd 1
]
]
tick
end
Кроме того, вы можете захотеть взглянуть на модель «Bounce Example»в Библиотеке моделей, которая показывает, как заставить прыгать под углом.