언어/기타
2010.08.19 03:58

자동 길찾기 기능을 만들어보자

조회 수 3499 추천 수 3 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

이 예제는 A*(에이스타) 알고리즘으로 구현한 길찾기입니다. 원래대로라면 맵 가로 사이즈 * 세로 사이즈 만큼의 변수가 필요하나, 길을 찾을 가능성을 줄이는 대신 변수 25개와 스위치 2개만으로 구현하였습니다(변수는 중복해서 쓰면 20개 이하 가능).


 


 


 


알고리즘 설명


 


 


 


원래대로라면 이런 길찾기 류의 알고리즘은 맵의 X, Y 좌표가 0,0 인 곳 부터 시작해서 맵의 제일 오른쪽 아래까지 하나하나 번호를 부여한 뒤 그 번호에 해당하는 변수에 검사를 했는지 아니면 장애물은 있는지 등등의 값을 저장하여야 합니다. 그런데, 맵은 최소 20 * 15 사이즈이므로 최소 300개의 변수가 필요하다는 말이 되고, 그렇다면 아무리 커야 70 * 70 정도 맵 밖에 만들 수 없을텐데(변수는 최대 5000개 사용 가능), 그 말은 즉 게임에 길 찾는 기능밖에 못 넣는다는 말이 됩니다. 그렇기 때문에 이 알고리즘은 길을 찾을 수 있는 가능성을 어느정도 줄인 대신, 주인공의 사방에 있는 8개의 칸, 즉 왼쪽 위, 위, 오른쪽 위, 왼쪽, 오른쪽, 왼쪽 아래, 아래, 오른쪽 아래 만을 사용하여 연산합니다. 이 방법을 사용하면, 맵이 길 찾기가 어느정도 쉬울 경우, 또는 매우 복잡하지만 외길인 경우에 밖에 찾아낼 수 없기는 하지만, 맵의 크기에 전혀 구애받지 않으며, 변수의 사용이 지극히 적다는 장점이 있습니다. 또한, 약간 개조하면 움직이는 목표에 대해서도 적용할 수가 있습니다.


 


먼저 루프를 돌립니다. 그 후 주인공의 왼쪽 위, 위, 오른쪽 위, 왼쪽, 오른쪽, 왼쪽 아래, 아래, 오른쪽 아래의 순으로 지형 ID를 구합니다. 지형 ID가 11(데이터베이스에서 장애물 지형을 따로 만들어줍니다. 참고로 좌표 바깥의 ID는 바다의 아이디라서...바다가 장애물이면 좀 난감해집니다..길을 잘 못찾음..그러니 바다가 장애물일 경우 바다도 지형 아이디를 바꾸어주세요)일 경우 장애물로 인식하고 65535 값을 줍니다(어느정도 큰 값을 주면 됨). 장애물로써 처리하고 싶은 지형은 ID로 식별하면 되고 이벤트를 장애물로 처리하고 싶으면 이벤트 ID로 식별하면 될 것입니다. 만약 상층 칩에 있는 것을 장애물로 하고 싶으면 상층칩의 오브젝트 위에 이벤트를 올려놓으면 될 것입니다.


 


만약 장애물이 아닌 경우, 먼저 목표물과의 X축 거리를 구한 뒤 Y축 거리를 거기에 더하고, 대각선인 경우 1.4(√2의 근사값), 대각선이 아닌 경우 1을 더합니다. 그런데 소수점이 지원이 안되므로, (목표물과의 X축 차이 + 목표물과의 Y축 차이) * 10 + (대각선인 경우 14, 아닌 경우 10) 의 값을 갖게 합니다. 대각선이라는 말은, 주인공이 이동할 경우에 대각선이 되는 위치, 즉 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래를 뜻합니다.


 


이 알고리즘은 자신이 어디서 왔는지는 알 방법이 없으므로, 이전에 이동한 방향을 기억해서 그것을 알아내는데, 가령 자신이 방금 오른쪽으로 이동했다면, 왼쪽에서 왔을 것입니다. 자신이 있었던 곳을 기억하는 이유는 물론 왔던 곳으로 다시 돌아가지 않게 하기 위해서죠.


 


그 후 만약 주인공의 위에 장애물이 있는데 주인공이 왼쪽 또는 오른쪽으로 가고 있었고, 진행 방향에 장애물이 없다면 그대로 가게 합니다. 관성이라고 표현하겠습니다. 즉, 벽을 따라가게 하는거죠. 훨씬 길을 잘 찾게 됩니다.


 


그 다음으로는, 대각선 이동을 하게 될 경우 만약 왼쪽 위로 이동하는데 위와 왼쪽에 장애물이 있으면 이동을 못합니다. 대각선 이동의 경우를 설정해줍니다.


 


아까 주인공 주위 8칸에 저런 숫자들의 값을 넣었는데 그 이유는 가장 작은 값을 가지는 쪽으로 가기 위해서입니다. 그리고 있었던 곳을 기억하는 이유는 저 식대로라면 자신이 왔던 곳이 더 작은 값을 가지는 경우가 빈번하기 때문입니다.


 


 


 


 


이 알고리즘은, 정확성(최단 거리가 아닌 최단거리에 가까운 거리를 찾을 가능성이 있습니다)과 가능성(길을 못찾고 뱅뱅 돌 수도 있습니다)이 약간 낮지만, 대신 사용하는 변수가 극히 적어서, 어느 게임에서나 사용할 수 있습니다. 그렇다면 이걸 어디다 쓰느냐? 제 생각에는 액션 알피지를 구현할 때 몬스터 또는 동료가 길을 찾는데 쓰면 좋을 것 같습니다. 이 알고리즘대로 써도 움직이는 목표를 따라갑니다. 그런데 약간 수정이 필요할 것이라고 말한 이유는, 만약 자신의 오른쪽에 몬스터가 있어서 오른쪽으로 갔는데, 몬스터가 순간이동을 해서 왼쪽으로 갔다면, 이 알고리즘은 방금 지나온 곳은 한칸을 더 가기 전에는 지나지 않으므로 약간 우회하게 됩니다. 그러나 몬스터의 이동속도가 그다지 빠르지 않고 순간이동 같은 것도 하지 않는다면, 이대로 써도 괜찮을 것입니다. 보통 액션 알피지에서 이동 루트를 주인공에게 다가감으로 설정할 경우, 장애물에 걸쳐서 못 오는 바보 몬스터를 보게 됩니다. 하지만 이 알고리즘을 사용한다면 조금 덜 바보를 보게 되겠지요.


 


 


예제 다운로드 : https://www.acoc.co.kr/bbs/data/acoc_board_ideatip/Pathfinder.zip


처음 맵은 직접 미로를 만들 수 있습니다. 첫번째 맵에서 목표에 도달하면 두번째 맵으로 가는데, 두번째 맵에서는 주인공을 다른 캐릭터가 쫓아옵니다.

?

  1. 게임,개발기획의 기초

    Date2011.08.01 Category언어/기타 ByGrand Views2818
    Read More
  2. [RPG2003] 한단계 도약 : 이중 변수번호의 변수

    Date2011.07.31 CategoryRPG Maker ByA. 미스릴 Views2369
    Read More
  3. 지형설정에서 원경(앞, 뒤)가 가지는 역할

    Date2011.07.28 Category언어/기타 ByDicky Views2421
    Read More
  4. rpg2K에서 경험치 패턴

    Date2011.06.21 CategoryRPG Maker By베넘 Views2619
    Read More
  5. Unity3D

    Date2011.03.29 Category언어/기타 By순수악 Views2845
    Read More
  6. 곱등이와의 대결

    Date2010.10.08 Category언어/기타 ByHiNi Views1133
    Read More
  7. RPG2K에서 함수를 사용해보기

    Date2010.09.15 CategoryRPG Maker ByBlack-☆ Views961
    Read More
  8. 액션게임만들기(Action Game Maker) HELP파일 번역

    Date2010.08.19 Category언어/기타 By다프트캣 Views4103
    Read More
  9. 자동 길찾기 기능을 만들어보자

    Date2010.08.19 Category언어/기타 ByBlack-☆ Views3499
    Read More
  10. RPG2K로 객체 지향적 프로그래밍을 해보자

    Date2010.08.02 CategoryRPG Maker ByBlack-☆ Views975
    Read More
  11. 1픽셀씩 맵스크롤

    Date2010.07.12 Category언어/기타 By설사즙 Views1148
    Read More
  12. 체력과 마력의 차이를 방어력에 더하는 방법.

    Date2010.07.12 Category언어/기타 By땅콩 Views1023
    Read More
  13. 날씨/구름/안개/바람 등

    Date2010.07.12 CategoryRPG Maker By설사즙 Views998
    Read More
  14. 전직 (제작중인 라르카르 온라인)

    Date2010.07.12 Category언어/기타 By펄기아의향기 Views1129
    Read More
  15. RPG2K 최적화 백과 사전

    Date2010.07.12 CategoryRPG Maker By아싸사랑 Views1227
    Read More
  16. 본문스크랩- rpg 제작툴 NWN

    Date2010.06.26 CategoryRPG Maker By세죠 Views3752
    Read More
  17. 본문 스크랩ㅡ 게임 브리오 엔진 소개

    Date2010.06.26 CategoryRPG Maker By세죠 Views3251
    Read More
  18. 본문 스크랩ㅡ 언리얼 엔진2

    Date2010.06.14 CategoryRPG Maker By세죠 Views2959
    Read More
  19. 변수의 수치를 픽쳐표기하기 간단 설명

    Date2010.04.22 Category언어/기타 By린쌍 Views671
    Read More
  20. 게임기획 및 시나리오 양식

    Date2010.04.11 Category언어/기타 By리혜 Views1071
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)