«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
04-20 22:53
관리 메뉴

lancelot.com

게임 프로그래밍의 정석 - 히라야마타카시 지음 / 김성훈 역 본문

프로그래밍

게임 프로그래밍의 정석 - 히라야마타카시 지음 / 김성훈 역

lancelot50 2016. 10. 26. 11:26

 

'세가의 신입사원 교육과정에서 배우는' 이라는 부제가 붙은 책이다.  

아직 파트1의 챕터1밖에 읽지는 못했는데, 목차를 훑어보니, '게임프로그래밍이란 이런 것이다' 라는 것을 컴퓨터 공학을 전공한 학생들을 대상으로 가르치기에 충분한 책처럼 보인다.  물론 전공이 아니더라도 프로그래밍에 대한 기초적인 이해가 있다면 얼마든지 볼 수 있을 것 같다.  

한마디로 훌륭한 초보자용 입문서.

 

목차는 크게

Part1. 2차원 게임

Part2. 3차원 게임

Part3. 판매용 제품으로 가는길

이렇게 세부분으로 나뉘어져있고, 각 부분마다 직접 간단하게 게임을 만들어보는 과정을 통해 게임만드는데 필요한 기술에는 이런것들이 있어~ 하고 설명하는 식으로 책이 구성되어있다.

전체 목차는 링크에.

 

맨처음 머릿말에서

  • 이 책은 어떤 책인가.
  • 이 책의 대상 독자.

이것을 명확하게 써주어서 더 매력적으로 보였다.

 

글쓴이는 적어도 무엇을 어디까지 할 것인가가 명확했기때문이다.  그래서 아직 파트1의 챕터1밖에 읽지못했는데도 이 글을 쓰고, 따라한 내용을 여기 써보기로 결정했다.

 

--------------------------------------------------------------------

 

Part1. 2차원게임

챕터1. 처음 만들어보는 게임.

 간단한 퍼즐게임 '배달맨'을 콘솔 출력 텍스트로 만들어보면서 게임에 대한 기초적인 이해를 돕는다.  

 

이런 종류의 게임인데, 나는 이 게임의 이름을 '창고지기'라고 알고있다.

처음부터 이렇게 그래픽으로 만드는 것은 아니고 콘솔로 만들게된다.

 

내 생각에, 일반 어플리케이션과는 조금 다른, 가장 중요한 게임 프로그래밍에 대한 개념이 여기서 등장하는데, 바로 게임이 무한루프를 도는 프로그램이고, 그 안에서 매 프레임마다 Draw와 Update를 반복하는 프로그램이라는 사실이다.

아마 저자도 이런 기초적인 개념을 먼저 알려주기위해 이렇게 시작하지 않나 싶다.

 

글쓴이의 모든 예제는 여기에 있고 책에도 설명이 있다.  하지만 스스로 만드는게 제일 좋으니, 일단 기본적인 룰만 보고 혼자서 만들어보았다(이거하면서 GitHub 사용법도 익히느라 2배로 삽질한듯)  

while(true)
{
	draw()
	input()
	update()
}
이런 형식으로 콘솔 프로젝트로 만들면된다.

 

저자는 2시간안에 만들면 좋고, 반나절이 걸려도 상관없다고 했지만, 나는 이거 며칠 만들었는데...  ㅠㅠ

https://github.com/lancelot50/sokoban.git

 

이렇게 따라 만들었다. (나중에 글쓴이 코드를 보니 엄청 간단하게 만들었는데, 내코드는 왜이래 ㅠㅠ)

 

챕터1의 1.1~1.2 에서 게임을 간단하게 만들고, 스테이지를 파일로부터 읽기(1.3), C++추가 공부(1.4~1.8)등으로 챕터1을 끝낸다.

저자의 예제에는 1.3부터 추가로 설명한, Array2D class를 사용한 버전, 비트연산을 사용한 버전, 메모리 할당을 하지 않고 전체를 하나의 메모리블럭으로 사용한 버전 등이 있는데, 그것들도 차근차근 살펴보면 좋을 것 같다(예제의 주석이 일본어인 듯 하지만 어짜피 코드만 보면 되니까)

 

한번 Github에 올려두었으니 시간 날때마다 책에 나오는 방향으로 코드를 개선하도록 하자.

 

 

챕터2는 다음에~

 

책에서 제공하는 라이브러리를 사용하여 Visual Studio 2019 에서 컴파일하려니 오류가 발생한다.

제공하는 라이브러리가 예전버전이라서 그런데, 아래 링크를 참조해서 Visual Studio 2019 에서 라이브러리의 소스를 불러서 빌드해주면된다.(제공하는 예제에 라이브러리들의 소스가 있다)

Gameframework 빌드 -> Scene_d.ib 없다고함 -> Module 빌드 (여기에 scene_d.lib 포함)

이런식으로 진행한다.

pre-build event, post-build 이벤트 제거 해주는게 핵심

아래 링크와 다르게 gameframework 빌드할때 locale이 오류가 추가로 나서 #include<locale>을 추가해주었다.

그리고 예제의 라이브러리들은 x86버전인데 반해, visual studio 2019 같은경우는 기본 프로젝트 설정이 x64인 것을 주의하자. (예제 라이브러리들을 모두 x64로 만들기는 좀 힘들것같고, 기본 프로젝트를 x86으로 맞추는 것이 쉽다)

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lunapro&logNo=220949568182 

 

VS2015에서 게임 프로그래밍의 정석 라이브러리, 예제 빌드 방법

수험생활도 끝나고, 옛날에 읽어두기만 하였던 책을 다시 보기로 하였는데 예제코드와 라이브러리가 구버젼...

blog.naver.com

이렇게 빌드된 lib 들을(debug/release 모두) 필요한 lib 폴더에 복사하면 성공!