2012-12-13 3 views
0

내 인터넷 로고 게임에 AI 형식을 구현하려고합니다.NetLogo 동적 맨하탄 거리

좀비 거북에서 인간 거북까지의 맨하탄 거리를 계산할 계획입니다.

지금까지 저는 맨하탄 거리를 계산하여 경로를 그리고 인간 거북이쪽으로 계산 된 길을 따라 좀비 에이전트를 움직였습니다.

지금 직면하고있는 문제는 사용자 에이전트 위치가 사용자에 의해 제어된다는 것입니다. Manhattan 거리는 while 루프를 사용하고 그것이 인간 에이전트에 도달 할 때까지 루프에서 벗어나지 않습니다. 나는 좀비 요원이 인간 요원쪽으로 한 걸음 나아가고 나서 요원이 움직 이도록하겠습니다.

코드는 지금까지 Net Logo Game

+0

코드가 많습니다. –

답변

0

난 당신이 plot-manhattan-distance 절차에서 뭘 하려는지 모르겠습니다. 상대적으로 단순해야하는 무언가에 대한 복잡한 접근처럼 보이지만 어쩌면 내가 당신의 목적을 오해했을 수도 있습니다.

globals [ 
    zombie 
    human 
] 

to setup 
    clear-all 
    ask n-of 2 patches [ sprout 1 ] 
    set human turtle 0 
    ask human [ set shape "person" ] 
    set zombie turtle 1 
    ask zombie [ pen-down ] 
end 

to go 
    ask human [ flee zombie ] 
    ask zombie [ pursue human ] 
end 

to pursue [ target ] 
    face target 
    set heading first sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270] 
    fd 1 
end 

to flee [ pursuer ] 
    face pursuer 
    rt 180 
    fd 0.5 
end 

고기가 pursue 절차에 : 여기 온 문제를 접근 할 방법이다. 좀비가 인간이 어디로 갈지 예측할 수 없기 때문에 좀비는 일반적인 방향으로 움직이려고합니다. 그것은 직접 인간을 직면하여 시작 (편리한 NetLogo face 기본). 그러나 아마도 4 가지 추기경 중 한 방향으로 만 움직일 수 있기 때문에 가장 바람직한 방향 즉, 현재 (이상적인) 방향과 가장 다른 방향을 선택해야합니다. 이것은 sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270] 표현식이하는 것입니다. 절대적인 차이를 현재 표제와 비교하여 경로 목록을 정렬합니다. 이 정렬 목록의 첫 번째 항목은 차이가 가장 작은 항목이므로 좀비가 사용해야하는 항목입니다.

현재 구현에서는 인간이 좀비를 멀리하려하지만 플레이어 제어 코드로 쉽게 대체 할 수 있습니다.

+0

훨씬 나은 해결책입니다. 고맙습니다. –