|
본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 2번째 도서인 실전편이다. 입문편과 유사한 개요 및 장점은 생략했으니 아래 입문편 리뷰를 참고하시기 바란다. 입문편과의 차이점은 다음과 같다.
입문편 리뷰에서 다 언급하지 못한 장점도 몇가지 추가할까 한다.
책은 크게 2개의 파트로 나뉘는데, 타임라인 순으로 배웠던 흔적들을 기록해 보았다.
입문편과 실전편을 모두 읽고 구현하는데 1달이 넘는 시간이 걸렸다. 직장을 다니기에 퇴근 후 저녁 시간만을 활용했다. Python을 데이터 분석 목적으로 몇년 간 자주 활용했으며, 15년 가까이 다른 프로그래밍 언어를 만들어왔고, 대학때는 작은 게임을 만들어 본 경험이 있는 상태임을 감안할 때 결코 적지 않은 시간이 소요된 셈이다. 만약 이 책의 뛰어난 구성상의 도움이 없었다면, Python이 아닌 다른 언어였다면(C++이나 어셈 같은) 예제 하나를 만드는데만 1달의 시간이 걸렸을 것 같다. 그만큼 이 책은 방대한 내용을 아주 쉽고 생산성 높게 만드는 방법을 전수해 준다.
개인적으로 정말 재미있는 단계는 지금, 즉, 책을 다 익히고 난 시점 이후이다. 기본기를 익혔으니 게임을 만들고 즐기며 떠올랐던 스스로의 아이디어를 녹이는 일을 시작할 수 있게 되었으니 말이다. 입문편 리뷰에서 소개했듯이 게임 업계의 꿈을 가지고 있거나, 게임 개발을 취미로 익히고 싶거나, Python으로 알고리즘 구현에 익숙해지고 싶은 분들에게 여러번 추천하고 싶다. |
|
"파이썬으로 배우는 게임 개발 - 실전편"을 리뷰를 하고자 합니다.
이 책은 이전 “파이썬으로 배우는 게임 개발 - 입문편”과 이어진 내용으로, 앞서 입문편의 경우 파이썬으로 위젯과 키입력 컨트롤을 통해 GUI 프로그램을 만들고, 간단하게 캐주얼한 2D 게임을 만드는 내용을 다룹니다. 실전편은 입문편의 기본적인 내용을 전제로 하여 본격적으로 완성도 높은 2D 게임을 만듭니다. 파이썬으로 배우는 게임 개발 입문편과 실전편은 각각 아래 링크에서 자세한 설명을 볼 수 있습니다. - 실전편 : https://jpub.tistory.com/1107 - 입문편 : https://jpub.tistory.com/1095
우선 내용과 상관없이 도서의 구성만으로도 칭찬하고 싶습니다. IT 도서 특성 상 소스 코드와 함께 주석을 삽입하거나 부가 설명이 내용에 들어가야 하는데, 소스와 주석을 분리하여 표현하여 구분도 쉬울 뿐만 아니라 설명이 같은 라인에 위치하기 때문에 이해도를 높이고 있습니다. 소스 코드 또한 적절한 컬러를 통해 이해도를 높입니다. 작은 부분이나 섬세하게 표현하고 있는 것이지요. 의외로 이런 부분을 신경쓰고 있는 도서가 많지 않다보니 도서 기획 단계서 부터 작가의 의도를 엿볼 수 있습니다.
간혹 소스 코드의 폰트 크기가 크고, 코드 양도 도서의 반을 차지하는 도서도 볼 수 있는데, 읽다보면 도서 양은 많으나 무성의함이 아닐까란 생각이 들면서 맥이 빠질 수 있고, 읽는 즐거움이 사라질 수 있는 부분이어서 저는 파이썬으로 배우는 게임 개발 - 입문편에 이어서 실전편도 구성에 좋은 짜임새를 갖춘 도서라 생각이 됩니다.
또한 도서의 전반적인 구성은 페이지를 나가 수록 살이 붙어지는 형식인데 - 입문편이 다양한 게임을 제작한다면 실전편은 한나의 게임에 들어가는 요소요소에 대한 살을 붙이는 구성입니다 - 독자로 하여금 이전 소스와 현재 소스와의 차이를 마커를 사용하여 분명하게 알려주고 있습니다. 입문편과 마찬가지로 독자의 이해도를 높이고자 하는 표현의 배려가 많다는 것은 내용을 떠나 도서의 소장 가치를 높인다고 생각됩니다.
입문편에 비해 실전편은 100 페이지 이상 늘어난 도서양을 가집니다. 입문편이 UI 위젯 사용을 위주로 다양한 2D 게임 제작을 위한 기초를 다뤘다면, 실전편은 액션과 슈팅, 레이싱 게임으로 세부분으로 나눌 수 있습니다.
만일 게임을 주로 주요 알고리즘만 다룬다면 어찌보면 게임 제작의 일부분만을 배웠을터인데, 모든 게임은 저자가 전문 게임 프로그래머답게 시나리오 기획부터 시작하고 있습니다. 걱정하지 마십시오. 기획부터 코딩까지 노하우가 없더라도 저자의 가이드를 받고 그저 따라가면 됩니다. 액션 게임 개발을 위한 기초는 1장에서부터 배울 수 있습니다.
액션 게임의 공간에 해당하는 캔버스(Canvas) 안의 맵에서 이동하려면 바닥과 이동 제한이 필요한 벽이 필요합니다. 그래서 바닥과 벽을 판단하기 위해서 좌표의 위치에 무엇이 있는지 판정해야 합니다. 2장부터는 이러한 맵을 기반으로 물체의 이동과 충돌을 다룹니다. 물체와 물체가 만나면 이동에 제한을 가해야 하기 때문에 히트 체크가 필요합니다. 사각형뿐만 아니라 원현의 히트 체크 또한 고려해야 합니다. 도서에서는 초록색 원과 주황색 원이 닿으면 밝은 연두색으로 바뀌는 것으로 "히트"를 표시하고 있습니다. 여기에서 수학의 기본에 해당하는 sin, cos, tan 삼각함수를 통해 캐릭터의 움직임을 예측하거나 이펙트의 자취를 화려하게 그릴 수 있습니다. 이러한 계산은 액션 게임 제작 이후에 이어지는 슈팅 게임 제작에서 삼각함수를 활용해 적기 이동 방향 계산이나 탄환 방사형 발사 등에 사용됩니다.
Chapter 5장부터는 pygame을 이용하여 슈팅 게임을 제작하는 방법을 배웁니다. pygame은 SDL(Simple DirectMedia Layer) 기반으로 파이썬으로 이미지 변환이나 그래픽 처리, 키 입력, 사운드 재생과 같은 멀티미디어 처리가 가능하기 때문에 게임 제작에 적합한 오픈 소스이고 파이썬 기반의 일부 레트로 게임들도 Pygame에 기반하고 있습니다. pygame에서의 사용자 입력 이벤트는 pygame.event 모듈의 pygame.event.get() 함수를 통해 알 수 있습니다. 이를 통해서 사용자 입력 처리하며, 게임 상태를 업데이트 하면서 갱신된 내용을 화면에 계속 그려 넣는다. 이것이 Pygame의 게임 루프이며, 루프를 통해 사용자 입력 이벤트와 상태 체크, 화면 갱신을 지속적으로 이어갑니다.
도서를 읽으면서 저자가 누락하지 않고 삽입해서 좋았던 내용인 시나리오와 같은 기획적인 내용입니다. 매 게임 제작 초반에 아래와 같이 무엇을 제작하려고 하는지 게임 내용과 스토리 보드를 시작으로 내용을 구성하였습니다. 비록 많은 부분을 할애한 것은 아니지만, 스토리 보드가 있어야 게임을 어떠한 방향으로, 어떤 구성을 갖출지 틀이 잡히기 때문에 중요한 부분이라고 생각됩니다. 또한 게임의 기본적인 동작만 구현하는 것이 아니라 완성도가 높은 게임은 끊임없이 질문을 하는 것이죠.
마지막으로 게임 개발은 확실히 쉽지 않는 분야라고 생각합니다. 기획자와 디자이너를 필요로 할뿐만 아니라 전문 게임을 위해서는 프로그래머도 각자의 역할에 따라 게임플레이어 프로그래머와 엔진 프로그래머, 그래픽/렌더링 프로그래머, 네트워크/서버 프로그래머를 필요로 합니다. 더욱이 인공지능과 UI 프론트엔드, 사운드 뿐만 아니라 서버 운영을 위한 인프라 엔지니어 등 정말로 필요한 인원들도 많겠지요. 게다가 완성도 높은 게임을 위해서는 게임 관련 이론 뿐만 아니라 게임 엔진을 기반으로 제작이 필요한데, 엔진 자체에 대한 학습도 오랜기간 필요합니다. 저자의 이력을 보면 알 수 있겠지만 게임 프로그래밍을 위해서 다양한 프로그래밍 언어도 사용될 뿐만 아니라 다양한 어플리케이션 개발 분야가 결합되어야 하고 여기에 본인이 열정이 더해져야 완성도 있는 게임도 만들 수 있고, 해당 분야의 전문가가 될 것이 분명합니다.
앞서 언급한 적이 있지만, 전문적인 게임 프로그래밍을 위해서 본 도서를 선택하여 학습을 했던 것은 아니었고 처음에는 파이썬으로 GUI 컨트롤을 할 수 있다는 점에 흥미가 생겨서 독서를 시작하였습니다. GUI 컨트롤이 가능하다보니 이를 이용하여 간단한 2D 게임 제작이 가능하게 된 것이고, 실전편에서 저자가 지도해준 맵 제작과 물체 간 히트체크를 하는 방법을 따라가보니 액션과 슈팅 게임, 레이싱 게임 제작이 가능하게 된 것이었습니다. 도서를 읽게 되면서 얻게 된 지금의 흥미가 게임 제작으로 이어질지는 모르겠으나, 저처럼 파이썬으로 기본 문법을 익히고 빌드 자동화나 머신러닝에 이어 웹서비스 개발까지 관심이 있는 분이라면 UI 기반의 위젯 컨트롤과 나아가서 게임 제작에 도전해보시길 바랍니다. |