-
(챕터 01) 처음만드는 게임(인트로)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 22. 22:42
책에서는 아래와 같은 푸쉬푸쉬? 게임을 처음부터 만들어간다.
이름은 배달맨이라고 하는..뭐....이름이 중요하진 않은것 같다.
책에서는 친절히 키보드 출력, 종료, 메인 루프 등 어느정도 자세하게 이해를 돕기 위해 작성이 되어있다.(이부분은 처음접하는 독자분들에게는 굉장히 고마울듯..)
게임은 입력을 받고 그 값을 반영하여 결과를 표시하는 처리가 반복되는 것으로 이뤄진다.
아래와 같이 표현되어 있다. 책에서는 아는 한 게임은 하나도 예외 없이 이런 구조로 되어있다고 한다..뭐..나야 본적이 없으니 모르지만...
while(true) { getInput(); Update(); Draw(); }
그리고 위의 화면 게임을 만드는데 직접만드는것을 요구하며..(물론 예제가 있다) 한시간 내로 하면 대단한것 반나절 걸렸어도 일단은 문제가 없다고 한다.그러나...이틀이상 걸리면 조금은 긴장하라고 이야기한다..!
스테이지 데이터의 경우 처음에는 전역변수로 선언을 한다.
const char gStageData[]="\ ########\n\ # .. p #\n\ # oo #\n\ # #\n\ ########"; const int gStageWidth=8; const int gStageHeight=5;
이런식으로 선언을 하고 나중에는 파일을 읽어서 저장을 하게 변한다..(놀랍더라?!)
그리고 가장 신기한 것은 열거형을 사용했다는 것.
아래와 같이 열거형을 선언해서 표현한다.
enum Object { OBJ_SPACE, OBJ_WALL, OBJ_GOAL, OBJ_BLOCK, OBJ_BLOCK_ON_GOAL, OBJ_MAN, OBJ_MAN_ON_GOAL, OBJ_UNKNOWN, };
이책을 보고 난 뒤에 열거형의 쓰임에 대해 다시한번 생각하게 되었다.!
그리고 여기선 Object 열거형을 1차원 배열로 선언해서 표현을 하는 방식을 택했다.
즉,
Object* state=new Object[x*y];
이런식으로 선언하였고 이것을 함수의 매개변수 인자로 활용하여 초기화 및 갱신, 화면 그리기..전부에 사용한다. 놀랍다...
2차원 배열을 1차원 배열로 표현하는 방법은 state[y * width + x] = t 로 표현을 할 수가 있다.
즉, state[5][5]라는 2차원 배열에서 state[2][3]을 가르키고 싶다면..
state[2 * 5 + 3]을 하면..state[13]이라는 값이 되고....계산해보면 이해가 될 것이다.
그래서 플레이어를 찾는 방법에서도..1차원 배열을 이용하여
state[i]=OBJ_MAN 이라고 할 경우 state[10]=OBJ_MAN 일 경우..
x의 값으로는 i(10) % w; 폭으로 나눈 나머지 = 폭이 5일 경우 0
y의 값으로는 i(10) / w; 폭으로 나눈 몫 = 폭이 5일 경우 2
이렇게 방법을 사용하고 있다. 어떤가 놀랍지 않나?... 나만 놀랐나..
그리고 이동에서는
1. 이동할 곳이 목적지 인가?
2. 이동한 곳이 상자인가? 그런데 그 방향 다음칸이 공백이나 목적지 인가?
로 구분하며 그 외의 것은 구현을 안함으로써..벽에는 안움직이게 만들었다.
이번 부분 마지막에서는 이렇게 정리가 된다.
"고려해야 할 것이 얼마든지 있다"는 인식부터 시작하자
'@ 16. 1 ~ 17. 1 > 게임프로그래밍의 정석' 카테고리의 다른 글
(챕터 02) 점에서 시작하는 2D그래픽(2) (0) 2013.04.24 (챕터 02) 점에서 시작하는 2D그래픽(1) (0) 2013.04.23 팁: 플래그와 비트연산 (0) 2013.04.23 (챕터 01) 처음만드는 게임(추가 부분) (2) 2013.04.22 게임프로그래밍 정석 책학습..인트로 (0) 2013.01.13