구조체변수
structure 다양한 타입의 변수들을 저장해두는 변수
enum과 다른점은 다양한 타입들의 변수를 저장할 수 있다는 점에 있다.
추가로 C++ enum에 대해 알아낸게 있다면 enum은 따로 메모리를 할당받지 않는다.
이 enum에 변수를 지정해 두면 해당 변수에 따른 메모리가 따로 할당된다
다시 structure로 넘어와서 이 structure는 여러타입의 변수를 가지고 있는 배열과 비슷한 형식이다.
{int 1, short 1, bool true} 같이 배열과 같은 방식으로 작성하게 된다.
이미 일렬배열의 형식을 띄고있는 이 변수를 배열형식으로 정의하면 이중배열을 띄게된다.
{int 1, short 1, bool true}
{int 1, short 2, bool false}
{int 1, short 3, bool true}
{int 2, short 1, bool false}
{int 2, short 3, bool true}
{int 2, short 3, bool false}
{int 3, short 1, bool true}
......등과 같이 배열이 된다.

structure 형식의 간단한 5x5 맵의 생성자이다.
xy좌표를 통해 타일들을 구분시키고 확률을 통해 적을 생성, 골드를 생성, 함정을 생성 등등 하는 노드이다.
아래에 있는 노드들로 타일의 정보를 확인할 수 있다.


위는 확률을 통해 오브젝트들을 생성하는 확률을 확인하는 코드이다.

참고로
랜덤으로 벨류를 받아오는 기능이 있는데 이 기능에서 최댓값을 지정해놓고 뽑아올 수 있는데 이 기능의 경우 최댓값이 뽑아올 수 있는 숫자의 최대치가 아닌 뽑아올 수 있는 숫자의 절대적인 수를 의미한다.
예를들면 내가 7으로 지정을 했다면 0부터 7까지의 수나 1부터 7까지의 수가 아닌 0부터 6까지 0 1 2 3 4 5 6 총 7개의 숫자를 뽑아오는것이다.
위 스크린샷은 이 전에 로또번호 생성코드를 짰었는데 숫자가 중복이 되는지 확인하는 단계에서 맨 위의 숫자가 랜덤으로 뽑히지 않는 이유를 알아내는 과정에서 랜덤의 구체적인 사용방법에 대해 알게된 코드이다.


위는 파일의 최종본이다.
실수로 본문의 최종본을 스크린샷 않았지만 최종적인 모든 구간을 설명하자면 이렇다.
맵생성:맵의 사이즈를 재정의하고
이동시스템:맵의 끝인지 아닌지 맵의 사이즈값에서 정보를 불러와 끝이 아니라면 이동 이후 맵의 정보들을 불러와 이벤트발생
전투시스템:적을 만나면 모든 버튼에 락이 걸려 움직이지 않고 가위바위보를 해 이기면 풀려남 이후 해당타일의 적 정보 삭제
골드시스템:이동한 구역에 돈이 있다면 돈을 획득 후 해당 타일의 돈 정보는 삭제
맵정보 확인프로그램:맵의 타일별 정보를 확인하는 프로그램
아직 타일별로 이미지파일등을 연결시키는 방법을 몰라 작동하는 게임은 만들지 못했지만 지금까지 배운 내용들로만 이용한다면 다음과 같이 만들 수 있다.
맵 불러오기(보통 실제 게임맵은 이미 저장된것을 바탕으로 불러옴)
맵의 구성요소들(구조체 배열):x, y, 적(열거형), NPC(열거형), 이벤트요소(함정, 아이템 등)(이 정보또한 종류가 많다면 enum으로 지정해서 혹은 범위내 랜덤으로 불러올 수 있다.), 지형요소 등등
플레이어(구조체): 위치정보를 가지고 있고 체력 골드 아이템 등등 여러 요소들을 가지고있을것이다. 필요한 정보의 수가 제일 많기때문에 하나의 오브젝트에 여러가지 구조체 열거형등 많은 요소들을 넣을 수 도 있을것같다.
NPC요소(구조체): 이동하는 NPC도 있어 플레이어처럼 따로 지정해두는것이 편할것 같다.
적 요소(구조체): 마찬가지로 이동하는 적들도 있고 체력이나 공격력 등의 정보들을 가지고 있어야해서 구조체로 정의하는게 좋을것이다. 최근엔 몬스터가 장비를 입고있는 경우도 많아 이들도 불러와 플레이어, NPC, 적은 기본 베이스가 같고 안의 내용이 종류별로 다를것이다.
행동요소(함수):이동, 공격, 방어 등이 있고 같은 행동의 함수 안에서도 종류가 나눠진 행동을 해야한다면(원거리공격, 근거리공격) 행동의 유형별로 함수를 지정해야할것이다.
등등 여러가지 요소들을 이용해
좌표를 이동하면 캐릭터의 이미지도 해당 XY좌표로 이동하며 이벤트등을 발생시켜 상호작용하게 하고 NPC는 일정 범위 내에 이벤트를 발생시켜 대화버튼을 누르게 한다던지 공격을 하면 XY좌표들에 순차적으로 이벤트를 발생시켜 겹치는 적들을 공격하는 이벤트를 발생시킨다던지 등의 활용법으로 만들것같다.