Как сделать так, чтобы черепахи / агенты не пропускали патчи? Модель гимназии. Коды предоставлены, но не работают
Привет, мне интересно, если кто-нибудь знает точный код, чтобы не допустить патчи войти в гимназию. Я закрыл все ворота, помеченные как красные пятна, а черные пятна - стены.
Проблема здесь в том, что я пробовал эти разные коды, но патчи все еще проходят сквозь стены. Может кто-нибудь мне помочь?
Обратите внимание, что я попробовал эти методы по одному, чтобы определить, есть ли какой-либо из ff. работал.
Буду признателен за помощь человеку / людям, которые могут мне помочь.
ask turtles[
ifelse [pcolor] of patch-left-and-ahead 1 1 = red [rt random-float 180 ]
[ let f random 5
ifelse [pcolor] of patch-right-and-ahead 1 1 = black [rt random-float 180 ]
[ let g random 5
ifelse [pcolor] of patch-at-heading-and-distance 1 1 = red [rt random-float 180 ]
[let h random 5
ifelse [pcolor] of patch-at-heading-and-distance 1 1 = black [rt random-float 180]
[let i random 5
ifelse [pcolor] of patch-ahead 1 = red [rt random-float 180 ]
[let h random 5
ifelse [pcolor] of patch-ahead 1 = black [rt random-float 180 ]
[let i random 5
ifelse [pcolor] of patch-left-and-ahead 1 1 = red [fd random-float 5]
[fd f]
ifelse [pcolor] of patch-right-and-ahead 1 1 = red [fd random-float 5]
[fd g]
ifelse [pcolor] of patch-at-heading-and-distance 1 1 = red [fd random-float 5]
[fd h]
ifelse [pcolor] of patch-at-heading-and-distance 1 1 = black [fd random-float 5]
[fd i]
ifelse [pcolor] of patch-ahead 1 = red [fd random-float 5]
[fd h]
ifelse [pcolor] of patch-ahead 1 = black [fd random-float 5]
[fd i]
]
]
]
]
]
По запросу вот код для патча:
to setup-world
set pcolor white
;;FLOOR------------------------------------------------------------------------------
if ( pycor < 91 and pycor > 10) and ( pxcor < 91 and pxcor > 7 ) [ set pcolor 8]
if ( pycor < 90 and pycor > 11) and ( pxcor = 7 ) [ set pcolor 8]
if ( pycor < 89 and pycor > 12) and ( pxcor = 6 ) [ set pcolor 8]
if ( pycor < 88 and pycor > 13) and ( pxcor = 5 ) [ set pcolor 8]
if ( pycor < 87 and pycor > 14) and ( pxcor = 4 ) [ set pcolor 8]
if ( pycor < 86 and pycor > 15) and ( pxcor = 3 ) [ set pcolor 8]
if ( pycor < 85 and pycor > 16) and ( pxcor = 2 ) [ set pcolor 8]
if ( pycor < 84 and pycor > 17) and ( pxcor = 1 ) [ set pcolor 8]
if ( pycor < 83 and pycor > 18) and ( pxcor = 0 ) [ set pcolor 8]
if ( pycor < 82 and pycor > 19) and ( pxcor = -1 ) [ set pcolor 8]
if ( pycor < 81 and pycor > 20) and ( pxcor = -2 ) [ set pcolor 8]
if ( pycor < 80 and pycor > 21) and ( pxcor = -3 ) [ set pcolor 8]
if ( pycor < 79 and pycor > 22) and ( pxcor = -4 ) [ set pcolor 8]
if ( pycor < 78 and pycor > 23) and ( pxcor = -5 ) [ set pcolor 8]
if ( pycor < 77 and pycor > 24) and ( pxcor = -6 ) [ set pcolor 8]
if ( pycor < 76 and pycor > 25) and ( pxcor = -7 ) [ set pcolor 8]
;;basketball -----------------------------------------------------------------------
if ( pycor < 68 and pycor > 33) and ( pxcor < 85 and pxcor > 9 ) [ set pcolor 37]
;;UP --------------------------------------------------------------------------------
if ( pycor = 90 ) and ( pxcor < 85 and pxcor > 7 ) [ set pcolor brown ]
if ( pycor = 88 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 88 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 88 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 86 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 86 ) and ( pxcor < 15 and pxcor > 10 ) [ set pcolor grey ]
if ( pycor = 86 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 84 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 84 ) and ( pxcor < 15 and pxcor > 10 ) [ set pcolor grey ]
if ( pycor = 84 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 82 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 82 ) and ( pxcor < 15 and pxcor > 10 ) [ set pcolor grey ]
if ( pycor = 82 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 80 ) and ( pxcor < 36 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 80 ) and ( pxcor < 15 and pxcor > 10 ) [ set pcolor grey ]
if ( pycor = 80 ) and ( pxcor < 81 and pxcor > 60 ) [ set pcolor brown ]
if ( pycor = 80 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 78 ) and ( pxcor < 36 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 78 ) and ( pxcor < 15 and pxcor > 10 ) [ set pcolor grey ]
if ( pycor = 78 ) and ( pxcor < 81 and pxcor > 60 ) [ set pcolor brown ]
if ( pycor = 78 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
;;DOWN -------------------------------------------------------------------------
if ( pycor = 11 ) and ( pxcor < 85 and pxcor > 7 ) [ set pcolor brown ]
if ( pycor = 13 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 13 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 13 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 15 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 15 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 15 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 17 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 17 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 17 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 19 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 19 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 19 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 21 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 21 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 21 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
if ( pycor = 23 ) and ( pxcor < 82 and pxcor > 14 ) [ set pcolor brown ]
if ( pycor = 23 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 23 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]
;;CORNER DOWN RIGHT--------------------------------------------------------------------
if ( pycor = 12 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 13 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 14 and pxcor = 5) [ set pcolor brown ]
if ( pycor = 13 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 13 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 14 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 15 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 16 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 15 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 16 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 17 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 18 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 18 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 19 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 20 and pxcor = 8) [ set pcolor brown ]
;;CORNER UP RIGHT---------------------------------------------------------
if ( pycor = 87 and pxcor = 5) [ set pcolor brown ]
if ( pycor = 88 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 89 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 88 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 88 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 87 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 86 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 85 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 86 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 85 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 84 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 83 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 83 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 82 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 81 and pxcor = 8) [ set pcolor brown ]
;;CENTER CORNER DOWN----------------------------------------------------------------
if ( pycor = 29 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 28 and pxcor = 0) [ set pcolor brown ]
if ( pycor = 27 and pxcor = 1) [ set pcolor brown ]
if ( pycor = 29 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 28 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 27 and pxcor = -2) [ set pcolor brown ]
if ( pycor = 26 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 29 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 28 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 27 and pxcor = -5) [ set pcolor brown ]
if ( pycor = 26 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 25 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 26 and pxcor = -7) [ set pcolor brown ]
if ( pycor = 25 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 24 and pxcor = -5) [ set pcolor brown ]
;;CENTER CORNER UP-------------------------------------------------------
if ( pycor = 72 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 73 and pxcor = 0) [ set pcolor brown ]
if ( pycor = 74 and pxcor = 1) [ set pcolor brown ]
if ( pycor = 72 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 73 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 74 and pxcor = -2) [ set pcolor brown ]
if ( pycor = 75 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 72 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 73 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 74 and pxcor = -5) [ set pcolor brown ]
if ( pycor = 75 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 76 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 75 and pxcor = -7) [ set pcolor brown ]
if ( pycor = 76 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 77 and pxcor = -5) [ set pcolor brown ]
;;center -------------------------------------------------------------------------
if ( pxcor = -8 ) and ( pycor < 75 and pycor > 26 ) [ set pcolor brown ]
if ( pxcor = -6 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor brown ]
if ( pxcor = -6 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = -6 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = -4 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor brown ]
if ( pxcor = -4 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = -4 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = -2 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor brown ]
if ( pxcor = -2 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = -2 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = 0 ) and ( pycor < 47 and pycor > 34 ) [ set pcolor brown ]
if ( pxcor = 0 ) and ( pycor < 67 and pycor > 54 ) [ set pcolor brown ]
if ( pxcor = 0 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = 0 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = 2 ) and ( pycor < 62 and pycor > 54 ) [ set pcolor brown ]
if ( pxcor = 2 ) and ( pycor < 47 and pycor > 38 ) [ set pcolor brown ]
if ( pxcor = 2 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = 2 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = 4 ) and ( pycor < 62 and pycor > 54 ) [ set pcolor brown ]
if ( pxcor = 4 ) and ( pycor < 47 and pycor > 38 ) [ set pcolor brown ]
if ( pxcor = 4 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = 4 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
if ( pxcor = 6 ) and ( pycor < 62 and pycor > 54 ) [ set pcolor brown ]
if ( pxcor = 6 ) and ( pycor < 47 and pycor > 38 ) [ set pcolor brown ]
if ( pxcor = 6 ) and ( pycor < 35 and pycor > 29 ) [ set pcolor grey ]
if ( pxcor = 6 ) and ( pycor < 72 and pycor > 66 ) [ set pcolor grey ]
;;WaLL----------------------------------------------------------------------
if ( pycor = 10 ) and ( pxcor < 85 and pxcor > 7 ) [ set pcolor black ]
if ( pycor = 91 ) and ( pxcor < 85 and pxcor > 7 ) [ set pcolor black ]
if ( pxcor = -9 ) and ( pycor < 76 and pycor > 25 ) [ set pcolor black ]
if ( pxcor = 91 ) and ( pycor < 34 and pycor > 9 ) [ set pcolor black ]
if ( pxcor = 91 ) and ( pycor < 92 and pycor > 67 ) [ set pcolor black ]
;;stage
if ( pxcor = 98) and ( pycor < 68 and pycor > 33 ) [ set pcolor black ]
if ( pycor = 33 ) and ( pxcor < 99 and pxcor > 91 ) [ set pcolor black ]
if ( pycor = 68 ) and ( pxcor < 99 and pxcor > 91 ) [ set pcolor black ]
if ( pycor = 11 and pxcor = 7) [ set pcolor black ]
if ( pycor = 12 and pxcor = 6) [ set pcolor black ]
if ( pycor = 13 and pxcor = 5) [ set pcolor black ]
if ( pycor = 14 and pxcor = 4) [ set pcolor black ]
if ( pycor = 15 and pxcor = 3) [ set pcolor black ]
if ( pycor = 22 and pxcor = -4) [ set pcolor black ]
if ( pycor = 23 and pxcor = -5) [ set pcolor black ]
if ( pycor = 24 and pxcor = -6) [ set pcolor black ]
if ( pycor = 25 and pxcor = -7) [ set pcolor black ]
if ( pycor = 26 and pxcor = -8) [ set pcolor black ]
if ( pycor = 90 and pxcor = 7) [ set pcolor black ]
if ( pycor = 89 and pxcor = 6) [ set pcolor black ]
if ( pycor = 88 and pxcor = 5) [ set pcolor black ]
if ( pycor = 87 and pxcor = 4) [ set pcolor black ]
if ( pycor = 86 and pxcor = 3) [ set pcolor black ]
if ( pycor = 79 and pxcor = -4) [ set pcolor black ]
if ( pycor = 78 and pxcor = -5) [ set pcolor black ]
if ( pycor = 77 and pxcor = -6) [ set pcolor black ]
if ( pycor = 76 and pxcor = -7) [ set pcolor black ]
if ( pycor = 75 and pxcor = -8) [ set pcolor black ]
;;stage--------------------------------------------------------------------------------
if ( pycor < 68 and pycor > 33) and ( pxcor < 98 and pxcor > 90 ) [ set pcolor 37 ]
;;lines-------------------------------------------------------------------------------
if ( pycor = 66 ) and ( pxcor < 82 and pxcor > 11 ) [ set pcolor yellow ]
if ( pycor = 35 ) and ( pxcor < 82 and pxcor > 11 ) [ set pcolor yellow ]
if ( pxcor = 12 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]
if ( pxcor = 82 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]
if ( pxcor = 47 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]
;;gates are closed initially ----------------------------------------------------------
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower left, right door
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower right, right door
if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower left, right door
if lower-left = "Half"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower left, right door
]
if lower-left = "Close"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower left, right door
]
;;-------------------------------------------------------------------------------------
;; lower right-------------------------------------------------------------------------
if lower-right = "Open"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower right, right door
]
if lower-right = "Half"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower right, right door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower right, left door
]
if lower-right = "Close"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower right, right door
]
;;-------------------------------------------------------------------------------------
;; upper left--------------------------------------------------------------------------
if upper-left = "Open"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor green ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor green ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor green ] ; upper left , left door
]
if upper-left = "Half"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
if upper-left = "Close"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
;; ------------------------------------------------------------------------------
;; upper right-------------------------------------------------------------------
if upper-right = "Open"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor green ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor green ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor green ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , left door
]
if upper-right = "Half"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , left door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , left door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , left door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , right door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , right door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , right door
]
if upper-right = "Close"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door
]
;; ----------------------------------------------------------------------------
end
to setupgate
ask patches [
;;exits--------------------------------------------------------------------------------
;; Point of view is when the agents are outside the Gymnasium.
;; lower left--------------------------------------------------------------------------
if lower-left = "Open"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower left, right door
]
if lower-left = "Half"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower left, right door
]
if lower-left = "Close"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower left, right door
]
;;-------------------------------------------------------------------------------------
;; lower right-------------------------------------------------------------------------
if lower-right = "Open"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor green ]
; lower right, right door
]
if lower-right = "Half"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor green ]
; lower right, right door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower right, left door
]
if lower-right = "Close"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84 ) [ set pcolor red ]
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87 ) [ set pcolor red ]
; lower right, right door
]
;;-------------------------------------------------------------------------------------
;; upper left--------------------------------------------------------------------------
if upper-left = "Open"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor green ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor green ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor green ] ; upper left , left door
]
if upper-left = "Half"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
if upper-left = "Close"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
;; ------------------------------------------------------------------------------
;; upper right-------------------------------------------------------------------
if upper-right = "Open"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor green ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor green ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor green ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , left door
]
if upper-right = "Half"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , left door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , left door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , left door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , right door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , right door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , right door
]
if upper-right = "Close"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door
]
;; ----------------------------------------------------------------------------
]
end
2 ответа
Это хороший дизайн:)
То, как вы хотите это сделать, должно работать только в тех случаях, когда вы точно проверяете патч, какой FD перемещает черепашку на этом патче. Я заметил, что вы проверяете patch-ahead 1
но вы просите свою черепаху fd random 5
который не проверяет случайные 5 патчей впереди и прыгает с красных патчей. Может быть много других способов сделать то, что вы хотите, и чаще всего я видел тот же подход, который вы использовали, если вы хотите, чтобы этот метод работал, вы должны проверять патч на правильном расстоянии, а не просто патч вперед.
Есть другой способ сделать то же самое, я не уверен, как агенты выбирают дверь, к которой они хотят двигаться, но я назначил свойство под названием ближайшая дверь и заполнил его одним из патчей с помощью [Pcolor = green], затем Я попросил агента проверить патчи с их скоростью ходьбы и посмотреть, если они белые, и они в правильном направлении, агент будет двигаться к этим патчам.
turtles-own
[closest-door]
to setup
....
create-turtles [
.....
set closest-door min-one-of patches with [pcolor = green][ distance myself] ; nearest door
set closest-door one-of patches with [pcolor = green] ; any open door
]
to go
ask turtles
[move-toward-gym closest-door random 5]
end
to move-toward-gym [my-door walking-speed]
if my-door!= nobody [
face my-door
let possible-moves patches with [distance myself = walking-speed and pcolor = white]
let t min-one-of possible-moves [distance my-door]
if t != nobody [move-to t ]
]
end
Обновить:
Во-первых, для контроля версий вы можете использовать Github, и вы никогда не потеряетесь с изменениями в вашем коде:)
Во-вторых, дайте мне знать, какие ошибки вы получаете, функция перемещения в спортзал работает, только если для агентов есть зеленый патч.
https://www.dropbox.com/s/j8qe7omoediwysw/out.mov
Обновить:
Я только что заметил, что вы просили весь мой код:
turtles-own
[closest-door
]
globals
[lower-left
lower-right
upper-left
upper-right
]
to setup
clear-all
movie-cancel
movie-start "out.mov"
ask patches [setup-world]
set lower-left "Open"
set lower-right "Open"
set upper-left "Open"
set upper-right "Open"
set upper-left "Open"
create-turtles 100 [
set size 2
move-to one-of patches with [
pcolor = white
]
set closest-door min-one-of patches with [pcolor = green][ distance myself] ; nearest door
set closest-door one-of patches with [pcolor = green] ; any open door
]
reset-ticks
end
to go
if ticks < 50
[
movie-grab-view
]
ask turtles
[move-toward-gym closest-door random 5]
if ticks = 50 [movie-close]
tick
end
to move-toward-gym [my-door walking-speed]
if my-door != nobody
[
face my-door
let possible-moves patches with [distance myself = walking-speed and pcolor = white]
let t min-one-of possible-moves [distance my-door]
ifelse t != nobody [move-to t] []
if any? patches with [distance myself = walking-speed and pcolor = green]
[move-to one-of patches with [pcolor = green]
]]
end
Вот пара примеров кода (в разделе "Примеры кода" в библиотеке моделей NetLogo): "Посмотри вперед" и "Пример следующего патча".
Посмотрите вперед. Пример показывает один из способов не допустить столкновения ваших черепах со стенами. Это также может быть полезно в качестве испытательного стенда для опробования более сложных правил движения черепах при наличии стен.
Следующий пример патча должен помочь вам лучше понять, почему математика и логика черепах, движущихся "непрерывно" по сетке патчей, сложнее, чем вы могли ожидать вначале.