지금 당장 뭐라도 해야한다.

   아무리 생각해도 나는 여지껏 한게 아무것도 없다. 그래서 뭐라도 해야 한다. 누군가 그랬다. 가장 좋은 공부는 무언가를 만들어보는 것이라고. 그래서 뭐라도 만들어보기로 했다. 뭐를 만들까 고민하다가 현실적으로 투자할 수 있는 시간이 하루에 얼마 되지 않기 때문에 엥간하면 작고 빠르게 만들 수 있는 것이 필요했다. 그래서 정했다. 누구나 한 번 쯤은 만들어본다는 테트리스를 만들기로.


 

목표

  1. 할 줄 아는게 홍정모님 강의 보고 배운 directX 11 밖에 없었다. 그래서 dx11을 이용해서 게임을 만들 것이다.
  2. 게임 로직하고 렌더링, 윈도우 이벤트 등 내부적인 코드는 분리하자.
  3. 최적화나 게임 로직상의 구조는 크게 신경쓰지 말자. 어려운걸 고민하다 보면 결국 포기하게 되더라. 일단 만들어보고 생각하자.
  4. 가능하면 게임의 완성도는 신경 쓰자. 그냥 작동하는 정도가 아니라 처음부터 끝까지 필요한 기능은 있는 느낌으로 만들자.
  5. 1주일 뒤인 11일 12월 31일 까지 완성할 수 있도록 하자.

   굉장히 어려워 보이기는 하는데, 어려워야 실력이 조금이라도 는다고 했다. 열심히 해보자…


 

결과

github 레포


완성되면 이 자리에 시연 동영상을 올리자.


 

경과

0일차 (12.4)

   모든 코드를 처음부터 다시 작성하려고 했는데, 이건 별로 쓸모 없는 짓이라는 생각이 들었다. 일단 윈도우 생성 코드는 기존에 작성했던 클래스를 복붙했다.

   문제가 하나 생겼는데, 사용자 입력을 위해 만들었던, Handler 클래스가 shared_ptr로 생성이 안된다. 모든 인수 형식을 변환할 수 있는 오버로드가 없습니다 라고 뜨는데, 오류에 맥락 정보가 부족해서 원인을 알기 힘들었다. 나중에 해결하고 보니까 그냥 생성자의 매개변수와 다른 타입의 변수를 넣어줬기 떄문이었다….


1일차 (12.5)

   dx11 초기화 코드로 복붙하려고 보니, 여러모로 추상화나 좋은 구조를 짜기 위해 노력한 부분이 있었는데, 문제는 완성되지 않았다는 것이다. 많이 빈약함이 보였다. 좀 객체지향적으로 예쁘고 추상화 되어있는 코드를 짜고 싶었지만, 현실적으로 시간도 부족하고, 좋은 설계를 할 수 있는 능력은 없다! 그래서 일단 Renderer라는 이름에 모든 directX 관련 코드를 모아놓기로 했다.

또 결국에는 졸려서 빌드하는 것을 못봤다. 대충 쉐이더만 생성하면 초기화는 얼추 끝날 것 같다.

내일은 텍스처를 저장하는 방법과 게임 로직 부분을 작성해야겠다.


2일차 (12.6)

   일단은 어제 못한 dx초기화를 완료하고 이를 빌드하고 확인할 수 있도록 메인 루프를 갖는 클래스를 만들었다. 3일 동안 겨우 초기화 정도만 건드릴 수 있었다! 두 가지 생각이 드는데, 하루에 1~2시간만 투자해서는 뭘 못할 것 같다는 생각이 드는 게 첫 번째이고, 초기화 하는 데에만 이렇게 시간이 많이 걸리는데, 과거 프로 개발자들은 어떻게 작업해왔는지 대단하다고 생각하고, 앞으로가 막막하기도 하다. 예전에 작성하고 고민했던 코드 재활용하는 것도 이렇게 오래 걸리는데, 처음부터 새로 작성하라고 하면… 어우. 아무튼, 이미지 하나 띄우는걸로 1주일을 다 쓰게 생겼다.


3일차 (12.7)

   일주일 안에 테트리스를 만든다는 것은 어려운 계획이었을까? 이제 겨우 이미지 로드하고 이를 텍스쳐로 등록하는 코드를 작성했다. 이미지 파일을 읽어오는 부분은 평소에 stb_image를 썼어서 직접 만들어보거나 다른 방법을 사용해보고 싶었는데, 역시 시간이 없다! 쓰던 코드를 그냥 가져다 썼다. 아직 이미지를 띄우기에는 상수 버퍼 올리는 거나 드로우콜 함수나 만들어야 할게 좀 더 남았다. 테트리스 비스무리한 것은 토요일날이나 되서야 만들 수 있을 것 같다.


4~8일차 (12.8~12)

   하하 완전히 실패했다. 왜냐하면 아팠기 때문이다. 주말 내내 아팠다. 하루종일 누워있었다. 월요일날 출근하자 마자 조퇴하고 병원을 갔다가 집에서 그냥 하루종일 누워있었다. 병원도 무슨 한시간을 기다리더라. 근처에 기침을 많이 하고 있는 사람이 있다면 조심해야 한다. 피해야하고, 같이 밥을 먹어서는 안된다.

   일단 완성 계획 올해 안에는 완성해보는 것을 목표로 해봐야겠다. 아직도 열기운이 남아있어서 당장 작업을 시작하기에는 쉽지 않을 것 같다. 늦은 김에 쉬엄쉬엄해야겠다.