대부분의 프로그래밍 컴파일러가 그러하듯, 게임메이커: 스튜디오(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 의 공식을 사용하면 되지요.
이 역시 올바른 위치에 문자열이 삽입된 것을 보실 수가 있습니다.
사실 이 공식은 스크립트 등에 저장해서 간편하게 사용하는 것이 더 좋습니다.