3

ここに画像の説明を入力

こんにちは、パッチが体育館に入らないようにする正確なコードを誰かが知っているかどうか疑問に思っています。赤いパッチとしてラベル付けされたすべてのゲートを閉じました。黒いパッチは壁です。

ここでの問題は、これらの異なるコードを試したにもかかわらず、パッチがまだ壁を通過していることです。誰でも私を助けることができますか?

これらの方法を 1 つずつ試して、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    
4

2 に答える 2

4

その素敵なデザイン:)

あなたがやりたい方法は、FDがそのパッチでタートルを動かすパッチを正確にチェックする場合にのみ機能するはずです。私はあなたがチェックしていることに気付きましたが、パッチ先行のランダム 5 をチェックせず、赤いパッチからジャンプpatch-ahead 1するタートルに尋ねました。fd random 5あなたが望むことを行うには他にも多くの方法があるかもしれません.ほとんどの場合、私はあなたが使用したのと同じアプローチを見てきました.

同じことを行う別の方法があります。エージェントが移動したいドアをどのように選択するかはわかりませんが、closest-door というプロパティを割り当て、[Pcolor = green] のパッチの 1 つで埋めました。私はエージェントに、そのパッチを歩行速度でチェックし、それらが白く、エージェントがそれらのパッチに移動する正しい方向にあるかどうかを確認するように依頼しました。

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 を使用でき、コードの変更で迷子になることはありません:)

次に、どのようなエラーが表示されるか教えてください。関数 move-toward-gym は、エージェントが使用できるグリーン パッチがある場合にのみ機能します。

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
于 2014-02-01T16:44:26.937 に答える
3

A couple relevant code examples (in the Code Examples section of the NetLogo Models Library) are Look Ahead Example and Next Patch Example.

Look Ahead Example shows one way to keep your turtles from bumping into walls. It might also be useful as a testbed for trying out more complicated rules for turtle motion in the presence of walls.

Next Patch Example should help improve your understanding of why the math and logic of turtles moving "continuously" over a patch grid is more complicated than you might expect at first.

于 2014-02-02T01:54:23.293 に答える