2017-04-02 10 views
1

안녕하세요, 오후에 푸른 거북이 4 세트 사이를 이동하려고 거북이를 만들려고합니다. 나는 그 (것)들을 그 헝겊 조각에 얻게 할 수있다 그러나 그 후에 그들은 다만 거기 체재하고, 나가 필요로하는 무엇을 그들의 권리에 다음 파란 헝겊 조각에 연속적으로 (순서대로) 움직인다이다. 나는 그것을하는 방법을 모른다. 사전으로패턴으로 움직이는 거북이 (Netlogo)

to move-turtles 

    ask turtles 
     [while [[pcolor] of patch-here != blue] 
     [ 
      face min-one-of patches with [pcolor = blue ] [ distance myself ] 
      forward 1 
     ] 
     ] 
    tick 
    end 

, 감사 :

이 나는에 대한 코드의 섹션 말하고있다!

답변

1

바로 인접한 패치에 발을 들여 놓으면 곧바로 가장 가까운 파란색 패치로 되돌아 가려고하므로 while 루프로 거북이가 첫 번째 파란색 패치에 걸릴 것입니다. 그들은 방금 떠났어). 또한 while 루프에서 발생하는 모든 사항은 단일 진드기 내에서 발생합니다. 설정의 일부로 가장 가까운 파란색 패치로 이동하려는 경우 move-to을 사용하면됩니다. 가장 가까운 파란색 패치 으로의 이동이 중요한 경우 인 경우 while 대신 if 문을 사용하는 것이 좋습니다.

또한 두 개의 서로 다른 "모드"로 설명합니다. 먼저, 거북이가 따라 다니기를 원하는 회로로 이동하기를 원합니다. 그런 다음 해당 회로에 있다면 순회 경로를 따라 회로의 다음 파란색 패치를 대상으로하고 그 패치로 이동하십시오. 따라서 두 개의 개별 절차를 설정하고 적절한 시간에 호출하는 것이 더 쉽습니다. 거북이가 다음 (현재 표적)으로 가고자하는 위치와 그들이 수행해야하는 이동 모드를 알고 있다면 도움이 될 것입니다. 그런 다음

to setup 
    ca 
    reset-ticks 
    ask (patch-set patch 5 5 patch 5 -5 patch -5 5 patch -5 -5) [ 
    set pcolor blue 
    ] 

    crt 1 [ 

    set on-circuit? false ;;; so a starting turtle knows which movement procedure to use 
    set my-target nobody  
    setxy random 30 - 15 random 30 - 15  
    pd 
    ] 

end 

:

turtles-own [ 
    on-circuit? 
    my-target 
] 

가 있는지 확인 그들이 정의되지 않은 변수의 기본 "0"이되지 않도록 당신이 당신의 설정에서 그 변수를 설정 : 그래서, 당신은 같은 turtles-own 변수를 설정할 수 있습니다 go 절차를 실행하여 거북이가 회로에 올라 가려고 시도 할 수 있습니다. 거짓이면, 회로에 걸어 간다면 걸어 갈 것입니다. 사실이다.

to go 

    ask turtles [ 
    ifelse on-circuit? = false [ ;;; do this if turtle is not yet on the circuit 
     get-to-circuit 
    ] 
    [ ;;; do this if the turtle has been designated as on the circuit 
     walk-circuit 
    ] 
    ] 
    tick 

end 

지금 당신은 당신의 get-to-circuitwalk-circuit 절차를합니다. 나는 내 get-to-circuit을 설정하는 방법을 보여,하지만 당신은 walk-circuit의 나머지 부분을 알아낼 수 있는지 볼 수 있습니다 : 그것은 완벽하게 작동

to get-to-circuit 

    set my-target min-one-of other patches with [pcolor = blue ] [ distance myself ] 
    face my-target 
    fd 1 
    if distance my-target < 1 [ 
    move-to my-target 
    ;;; This lets the turtle know it can switch to "walk-circuit" on the next tick 
    set on-circuit? true 
    set heading one-of [ 0 90 180 270 ] 
    ] 
end 


to walk-circuit 
    if my-target = nobody [ 
    set my-target one-of (other patches with [ pcolor = blue ]) in-cone 10 180 
    ] 
? 
? 
? ... 
+0

! 고맙습니다! –