오른손 법칙

 

자료구조와 알고리즘 공부를 시작하겠다.

Visual Studio의 콘솔을 이용해서 간단한 맵을 만들어놓고 다양한 알고리즘을 실습해보겠다.

 


 

1-0. 실습을 진행할 map

콘솔 출력 창에 띄운 map이다. 

콘솔 관련 코드와 이중 반복문 등을 통해 제작한 것이고 자세한 건 생략하겠다.

 


 

우선 오른손 법칙이란 쉽게 설명하자면 미로에서 오른손을 벽에 대고 계속 이동한다고 생각하면 된다.

단순하고 무식한 방법이지만 웬만한 미로 등에 통하는 방법이기도 하다.

 

 

1-1. 플레이어 위치
1-2. 출구 위치

우선 1-1, 1-2 이미지와 같이 플레이어의 위치와 출구의 위치를 스택 메모리에 일시적으로 저장해놓는다.

저장해놓은 위치 정보를 토대로 플레이어가 출구에 도착할 때까지 반복하는 코드를 만들면 된다.

 


 

1-3. 오른쪽으로 이동
참고사항1
참고사항2

반복문을 이용해 플레이어가 출구에 도착할 때까지 반복하고 

오른쪽 길이 비어있는지 확인한 후 비어있다면 이동하는 코드이다.

 

_dir은 플레이어 클래스 내부에 선언된 플레이어가 바라보는 방향을 의미한다.

참고사항 이미지를 참고해서 코드를 해석하자면 

 

일단 오른쪽 방향을 보게 해야 하므로 _dir - 1을 해주고 음수가 있으면 안 되니까 DIR_COUNT를 더해준다.

그리고 DIR_COUNT를 나머지 연산을 해주게 되면 현재 바라보고 있던 방향에서 오른쪽으로 바라보게 된다.

이후에 오른쪽으로 이동할 수 있는지에 대한 함수를 만들고 현 위치에서 오른쪽으로 한 보 전진한 위치를 더하고 

해당 값을 매개값으로 넘겨준다. 그러면 만들어둔 CanGo 함수에서 해당 길이 비어있는지 확인해서 bool값을 뱉어준다.

바라보는 방향은 스택 메모리에 저장된 일시적인 값이기 때문에 실제 플레이어의 바라보는 방향을 바꾸기 위해

_dir += newDir을 실행해준다. 그리고 가야 하는 경로를 저장해주기 위한 vector 타입의 _path를 만들고

해당 벡터에 오른쪽으로 한 보 전진한  값을 넣어준다.

 

그외에 경우의 수도 다르지 않다.

오른쪽으로 갈 수 없다면 원래 바라보는 방향으로 일 보 전진하는 코드,

그것도 아니라면 왼쪽으로 방향을 회전하는 코드도 같은 원리를 이용하므로 생략하도록 하겠다.

 


 

이제 가야 할 경로를 벡터 _path가 저장하고 있는 상태이다. 

그럼 이제 _path를 이용해서 플레이어를 실질적으로 움직여야 한다.

움직이는 것은 Update에서 진행하면 된다.

 

 

1-4. 플레이어 움직이기
참고사항1
참고사항2

_pathIndex는 경로를 기준으로 어디까지 이동했는지 추적하기 위한 값이다. 

해당 값이 _path 사이즈보다 크면 더 이상 갈 수 있는 경로가 없다는 뜻이기 때문에 리턴을 한다.

그리고 플레이어가 움직이는 것이 너무 빠르기 때문에 이것을 조절하기 위한 변수 _sumTick를 만들고

현재 시간 경과를 뜻하는 deltaTick의 값을 더해준다. 해당 값이 100(ms)을 넘었을 경우 

다시 _sumTick의 값을 0으로 초기화 해주고 실제 위치를 저장해두었던 경로로 순서대로 바꿔준다.

 

 


 

1-5. 플레이어가 출구에 도착

간략하게 주요 코드만 알아보았고 여기까지 문제 없이 진행하면 1-5 이미지처럼 플레이어가

출구로 오른손 법칙을 이용해서 이동하는 것을 확인할 수 있다.

 

해당 map을 만드는 코드와 그외 자세한 코드들은 자료구조 알고리즘 강의를 다시 보자.

 

+ Recent posts