티스토리 뷰

해상도 800 * 480을 예로 들어 보자.

미니 맵을 생성시켜 각 캐릭터의 위치를 확인을 하고 이 위치를 이용해 충돌 체크를 진행한다.


계산을 편하게 하기 위해 80*48 크기로 지도를 설정한다.

미니맵의 10배는 원 사이즈라고 생각을 한다.


보통 타일 처리를 통해 미니맵을 구성하게 되면 2차 배열로 구현한다.

이렇게 하면 크게 햇갈리지도 않고 쉽게 작성이 가능하다.


하지만 2차 배열이 가진 구조적인 부분은 1차 배열에 비해 복잡하다.

그래서 1차 배열로 좀 처리를 해보자.


[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]

[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]

[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]

[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]

[4,0] [4,1] [4,2] [4,3] [4,4] [4,5]

[5,0] [5,1] [5,2] [5,3] [5,4] [5,5]


이런 이중 배열이 있다고 하자. 이것을 세로로 죽 나열을 해보면


[0,0]

[0,1]

[0,2]

[0,3]

[0,4]

[0,5]

[1,0]

[1,1]

..

..

[2,0]

[2,1]

..

..

[3,0]

[3,1]

..

..

순으로 될 것이다. 이제 수학시간에 많이 배웠던 간단한 알고리즘 식을 찾는 방법을 이용해 풀어보자.

먼저 우리는 이 것을 1차원 배열로 나타내고자 하니 이렇게 대입을 시켜보자.


[0] = [0,0]

[1] = [0,1]

[2] = [0,2]

[3] = [0,3]

[4] = [0,4]

[5] = [0,5]

[6] = [1,0]

[7] = [1,1]

[8] = [1,2]

..

..

..


표현된 식을 이용해 우수한 두뇌로 생각을 해보면


x값이 6 번씩(0부터 5까지 돌기 때문에 6) 루프를 돌때마다 y값이 1씩 증가한다.

이 말인 즉슨 x값을 y값에 루프를 도는 6를 곱한 결과를 더한 값과 같다는 말이다.

무엇이든 말로 써놓으면 이해가 어려우니 식을 만들어 보자


1차배열 index = x + (y * 루프횟수)


이 값을 이용해 검증을 좀 해보자.


0 = 0 + (0 * 6)  : (x=0, y=0)

1 = 1 + (0 * 6)  : (x=1, y=0)

2 = 2 + (0 * 6)  : (x=2, y=0)

3 = 3 + (0 * 6)  : (x=3, y=0)

4 = 4 + (0 * 6)  : (x=4, y=0)

5 = 5 + (0 * 6)  : (x=5, y=0)

6 = 0 + (0 * 6)  : (x=0, y=1)

7 = 1 + (0 * 6)  : (x=0, y=1)

..

..

..


잘 되는 것을 확인 할 수 있다.

이 이 6번씩 도는 루프를 X의 최고 값. 즉 게임 화면의 가로 사이즈라고 생각하면 우리는 80이라는 값이 될 것이다.

때문에 결과적으로 이 내용을 이용해 1차 배열로 값을 입력하는 코드를 짜보면 다음과 같이 되는 것이다.


for(int y=0; y<48; y++) {

   for(int x=0; x<80; x++) {

array[x + y * 80] = 넣을 캐릭터 정보;

   }

}


이것을 좀더 보기 좋게 표현을 해보면 변수를 설정하여 for 문에 대입한다.


int height = 48;

int width = 80;


for(int y=0; y<height; y++) {

   for(int x=0; x<width; x++) {

array[x + y * width] = 넣을 캐릭터 정보;

   }

}


끝!

정말 별것도 아닌 내용이지만 이렇게 모아놓으면 언젠가 봐줄만 할 듯 하다.

댓글
댓글쓰기 폼