Programming/GMS

GMS, 다차원 배열을 사용해보자

wnsrn3436 2013.10.13 18:32

 

대부분의 프로그래밍 컴파일러가 그러하듯, 게임메이커: 스튜디오(GameMaker: Studio)에서도 배열은 2차원까지만 지원합니다.

하지만 여러분들이 어느 날 갑자기 꼭 n차원 배열을 사용해야 하는 때가 온다면 어떻게 해야 할까요?

이 강좌에서는 n차원 배열을 구현할 수 있는 여러 가지 방법 중 한 가지 방법을 제시하고자 합니다.

 

 

위 그림은 멍멍이(qw5628)님의 3차원 배열이 [N1, N2, N3] 일 때, [5, 4, 3] 이라는 크기를 가진 배열의 주소를 설명하는 사진입니다.

이 강좌에서는 N을 배열 크기로, n을 배열에 삽입하는 숫자라고 정의하겠습니다.

 

[N1, N2] 에서 [5, 4] 가 배열의 크기일 때, [0, 0] 의 주소는 0 이고, [0, 3] 의 주소가 3 이라면,  [1, 0] 의 주소는 4 일 것입니다.

다시 한 번 생각해보자면 [1, 0] 의 주소는 (1*4)+0 라고 표현할 수도 있는 것을 보실 수가 있습니다.

그러니까 식으로 살펴보자면 [n1, n2] 는 (n2*N1)+n1 정도가 되겠지요.

 

이제 위 식을 3차원으로 확장해봅시다.

[N1, N2, N3] 에서, [5, 4, 3] 이 배열의 크기일 때, [1, 2, 1] 의 주소는 (1*4*3)+(2*3)+1 이라고 표현되겠네요.

식으로 살펴보자면 [n1, n2, n3] 의 주소는 (n3*N2*N1)+(n2*N1)+n1 정도가 되겠지요.

 

식의 규칙성이 좀 보이시나요?

그런데 배열의 주소를 찾아내는 식을 알아서 뭘 하느냐고요?

 

n차원 배열의 주소를 알아내면 n차원의 배열을 1차원이나 2차원의 배열에 삽입할 수가 있습니다.

[(N3*n2*n1)+(N2*n1)+N1] 이렇게 3차원의 배열을 1차원의 배열에 집어넣을 수가 있는 것입니다.

이게 바로 n차원 배열을 구현할 수 있는 한 가지 방법인 것입니다.

 

게임메이커는 [32000, 32000] 크기의 배열을 지원합니다.

여러분의 n차원 배열이 32000 크기가 넘지 않는다면, 1차원 배열에 n차원 배열을 구현하시면 됩니다.

 

 

이제 증명해봅시다.

[5, 4, 3] 이라는 배열의 크기는 5*4*3 의 60 입니다.

따라서 위 프로그램을 실행하면 0~59 의 숫자가 배열에 존재해야 정상입니다.

 

 

짜잔!

정상적으로 0~59 의 숫자가 배열에 저장된 것을 보실 수가 있습니다.

 

 

이번에는 내가 원하는 위치인 [1, 2, 1] 과 [4, 3, 2] 주소에 문자열을 삽입해 보겠습니다.

각각 (1*array_size_2d*array_size_3d)+(2*array_size_3d)+1, (4*array_size_2d*array_size_3d)+(3*array_size_3d)+2 의 공식을 사용하면 되지요.

 

 

이 역시 올바른 위치에 문자열이 삽입된 것을 보실 수가 있습니다.

사실 이 공식은 스크립트 등에 저장해서 간편하게 사용하는 것이 더 좋습니다.

 

Multi-Dimensional Array.gmz

 

http://cafe.naver.com/playgm

Tag
0 Comments