GAME MAKER 강좌
KAYAN
◈데이터 구조체
게임메이커에서 배열과 비슷한 기능이지만, 단순하면서도 사용하기 편리한 데이터 구조체라는 기능이
있습니다.
이들은 값을 입력하고 원하는 값을 쉽게 찾을 수 있으며, 삭제하여 메모리에서 완전히 제거할 수도 있습니다.
배열은 낱개의 아이템들의 모임이라고 한다면, 데이터 구조물은 아이템을 담은 박스 그 자체라고 보시면
됩니다.
◈ 스택 (ds_stack)
스택 (ds_stack)은 값을 순차적으로 입력하고, 최근에 입력한 값을 반환시킬 수 있습니다.
보통 값을 되돌릴 때 유용하게 사용할 수 있습니다.
(▲ 스택의 구조)
스택은 기본적으로 아래의 함수를 통해 생성하고, 또는 파기하여 메모리에서 완전히 제거할 수 있습니다.
ds_stack_create( ) : 새로운 스택을 생성합니다. ds_stack_destroy(id) : 생성된 스택을 완전히 파기합니다. ds_stack_clear(id) : 생성된 스택을 클리어하여 입력된 값들을 모두 지웁니다. |
스택을 생성할 때는 아래와 같이 생성하고, 스택의 id를 변수에 할당한 후, 그 변수를 통해 스택을
제어하게 됩니다.
예) stack=ds_stack_create( ); |
값을 넣을 때는 아래의 함수를 통해 값을 입력하게 됩니다.
ds_stack_push(id,val) : (id)스택에 (val)값을 넣습니다. |
스택은 최근에 입력된 값을 찾은 후 해당 값을 제거하는 것과 값만 찾는 2가지 형태가 있습니다.
입력된 값을 찾고자 할 때는 아래의 함수를 사용합니다.
ds_stack_pop(id) : 최근에 입력된 (id)스택의 값을 반환하고, 스택에서 제거합니다. ds_stack_top(id) : 최근에 입력된 (id)스택의 값을 반환하지만, 스택에서 제거하지는 않습니다. |
참고로 값을 찾을 때, 값을 제거(ds_stack_pop)하게 되면 다음 스텝에서 그 다음 값을 읽을 수
있게 됩니다. 하지만 값을 제거하지 않으면(ds_stack_top) 최근에 입력한 값만 읽을 수 있습니다.
상황에 따라 맞는 함수를 사용하시면 됩니다.
스택의 크기(입력된 값들의 개수)를 체크하고자 할 때는 아래의 함수를 사용합니다.
ds_stack_size(id) : 스택에 저정된 값의 수를 반환합니다. ds_stack_empty(id) : 스택이 비었는지를 반환합니다. 이것은 사이즈가 0 일지 테스트하는 것과 같습니다. |
◈ 큐 (ds_queue)
큐 (ds_queue)는 순차적으로 값을 입력하고, 맨 처음에 입력한 값을 반환시킬 수 있습니다.
큐는 스택과 비슷하지만, 값을 가장 처음에 입력한 값을 읽을 수 있고, 스택은 가장 나중에
입력한 값(나중에 입력한 값)을 읽는다는 것이 다릅니다.
보통 값의 변화를 알아보거나 리플레이 기능을 사용할 때 유용합니다.
(▲ 큐의 구조)
큐는 기본적으로 아래의 함수를 통해 생성하고, 또는 파기하여 메모리에서 완전히 제거할 수 있습니다.
ds_queue_create( ) : 새로운 큐를 생성합니다. ds_queue_destroy(id) : 지정한 (id)큐를 완전히 파기합니다. ds_queue_clear(id) : 지정한 (id)큐를 클리어하여 입력된 값들을 모두 지웁니다. |
큐을 생성할 때는 아래와 같이 생성하고, 큐의 id를 변수에 할당한 후, 그 변수를
통해 큐를 제어하게 됩니다.
예) queue=ds_queue_create( ); |
값을 넣을 때는 아래의 함수를 통해 값을 입력하게 됩니다.
ds_queue_enqueue(id,val) : (id)큐에 (val)값을 입력합니다. |
큐는 맨 처음에 입력된 값을 찾은 후 해당 값을 제거하는 것과 값만 찾는 2가지 형태가 있습니다.
입력된 값을 찾고자 할 때는 아래의 함수를 사용합니다.
ds_queue_dequeue(id) : (id)큐에서 맨 처음에 추가한 값을 반환하고, 큐에서 제거합니다. ds_queue_head(id) : (id)큐에서 맨 처음 추가한 값을 반환하고 큐에서 제거하지는 않습니다. ds_queue_tail(id) : (id)큐에서 맨 나중에 추가한 값을 반환하고 큐에서 제거하지는 않습니다. |
참고로 값을 찾을 때, 값을 제거(ds_queue_dequeue)하게 되면 다음 스텝에서 맨 처음에 추가한 값
다음 값을 읽을 수 있게 됩니다. 하지만 값을 제거하지 않으면(ds_queue_head, ds_queue_tail)
최근에 입력한 값과 맨 나중에 추가한 값 2가지만 읽을 수 있습니다.
큐의 크기(입력된 값들의 개수)를 체크하고자 할 때는 아래의 함수를 사용합니다.
ds_queue_size(id) : (id)큐에 저장된 값의 수를 반환합니다. ds_queue_empty(id) : (id)큐가 비었는지를 반환합니다. 이것은 사이즈가 0 일지 테스트하는 것과 같습니다. |
◈ 리스트 (ds_list)
리스트 (ds_list)는 값을 순차적으로 입력하거나, 순서와 상관없이 어느 위치에서든 값을 끼워 추가할 수
있고, 변경할 수도 있는 유용한 기능을 가졌습니다. 마치 책장에 여러 책들을 진열하는 것과 같은
형태라 볼 수 있지요.
(▲ 리스트의 구조)
리스트는 기본적으로 아래의 함수를 통해 생성하고, 또는 파기하여 메모리에서 완전히 제거할 수 있습니다.
ds_list_create( ) : 새로운 리스트를 생성합니다. ds_list_destroy(id) : 지정한 (id)리스트를 완전히 파기합니다. ds_list_clear(id) : 지정한 (id)리스트를 클리어하여 입력된 값들을 모두 지웁니다. |
리스트를 생성할 때는 아래와 같이 생성하고, 리스트의 id를 변수에 할당한 후, 그 변수를 통해 리스트를
제어하게 됩니다.
예) list=ds_list_create( ); |
값을 넣을 때는 아래의 함수를 통해 값을 입력하게 됩니다.
ds_list_add(id,val) : (id)리스트의 끝에 (val)값을 추가합니다. ds_list_insert(id,pos,val) : (id)리스트의 (pos)위치에 (val)값을 추가합니다. 첫번째 위치는 0, 마지막 위치는 리스트의 사이즈에 -1을 뺀 값입니다. ds_list_replace(id,pos,val) : (id)리스트의 (pos)위치에 값을 새로운 (val)값으로 교체합니다. |
값을 삭제할 때는 아래의 함수를 사용합니다.
ds_list_delete(id,pos) : (id)리스트의 (pos)위치에 값을 삭제합니다. (0은 첫번째 위치) |
참고로 값을 삭제하면, 삭제한 위치 이후에 있는 값들의 위치가 순차적으로 당겨집니다.
즉, [0,1,2,3,4,5] 가 있을 때, 2번을 삭제하면, [0,1, ,3,4,5] 처럼 비는 것이 아니라,
[0,1,3,4,5] 와 같이 위치가 재정렬 되는 것입니다.
입력된 값을 찾고자 할 때는 아래의 함수를 사용합니다.
ds_list_find_index(id,val) : 지정한 (val)값을 저장한 위치를 찾습니다. 만약 값이 없다면 -1이 반환됩니다. ds_list_find_value(id,pos) : 지정한 (pos)에 저장된 값을 찾습니다. |
보통 아래와 같이 값을 검색하게 됩니다.
예) 리스트에 값이 있는지 찾을 때 //인스턴스의 id가 저장된 리스트에서 자신의 id가 있는지 체크 하고 싶을 때 pos=ds_list_find_index(list,id); //자신의 id 값이 있는 위치를 검색 if !(pos<0){ //찾고자 하는 id 값이 있으면 위치를 반환하고, 값이 리스트에 없으면 -1 ds_list_delete(list,pos);//해당 위치의 값을 삭제 instance_destroy( ); } 예)리스트에서 값을 찾을 때 //모든 리스트를 검색하여 값을 모두 더하고 싶을 떄 a=0; for(i=0;i<ds_list_size(list);i+=1;){ val=ds_list_find_value(list,pos); a+=val; } |
리스트는 입력된 값에 따라 오름차순, 또는 내림차순으로 정렬하거나, 값들을 랜덤으로 섞을 수 있습니다.
ds_list_sort(id,ascend) : 리스트의 값을 정렬합니다. ascend : false 또는 true false - 내림순(값을 큰순으로 정렬. 처음은 최대값, 마지막은 최소값) true - 오름순(값을 작은순으로 정렬. 처음은 최소값, 마지막은 최대값) ds_list_shuffle(id) : 리스트의 값을 랜덤으로 뒤섞습니다. |
리스트의 크기(입력된 값들의 개수)를 체크하고자 할 때는 아래의 함수를 사용합니다.
ds_list_size(id) : 리스트에 저장된 값의 수를 반환합니다. ds_list_empty(id) : 리스트가 비었는지를 반환합니다. 이것은 사이즈가 0과 같은지를 테스트하는 것과 같습니다. |
'GameMaker강좌[GM8] > 기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GM8] 윈도우 게임 배포 파일 만들기 (0) | 2018.08.19 |
---|---|
[게임메이커-기초]데이터 구조체-2(ds_map, ds_grid, ds_priority) (0) | 2018.04.19 |
[게임메이커강좌-기초] 텍스트 파일 작성 (2) | 2017.04.01 |
[게임메이커강좌-기초] ini 파일 작성 (2) | 2017.03.26 |
[게임메이커강좌-기초] 중력에 의한 이동 (2) | 2017.02.13 |
댓글