[리뷰] 파이썬으로 배우는 게임 개발 실전편



제이펍 출판사의 "파이썬으로 배우는 게임 개발 실전편(히로세 츠요시 저/김연수 역)"를 읽고 작성한 리뷰입니다.

표지


본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 2번째 도서인 실전편이다. 입문편과 유사한 개요 및 장점은 생략했으니 아래 입문편 리뷰를 참고하시기 바란다.

입문편과의 차이점은 다음과 같다.

  • Python을 어느정도 알고 있어야 한다.
  • 입문편을 익혔다면 1, 3 ~ 5장은 건너 뛰어도 된다.
  • 고난이도(?) 수학이 등장하기 시작한다. (특히 삼각함수)
  • 3차원이 세계에 발을 내딛는다.(유사 3D를 구현)
  • 작지만 효과 넘치는 디테일한 Tip들을 얻을 수 있다.
  • 상용 게임에 가까운 완성도를 추구한다.(런쳐 개발 등)

입문편 리뷰에서 다 언급하지 못한 장점도 몇가지 추가할까 한다.

  • Python을 선택한 것은 신의 한수다. 실전과 취미의 적절한 경계선이라 생각한다. 이 책 본문에도 등장하는 슈팅게임 만들기와 비교해 보면, 대학시절 슈팅게임을 만들어보면서 미사일이 느려서 인라인 어셈과 C++을 사용했던 기억을 떠올리면 난이도도, 코드량도 10배는 향상된 느낌이다.

  • 구성도 내용만큼이나 뛰어나다.

    • 덕후스럽지만 2분의 여성 교수님과 조교님이 진행을 잘 이끄신다.
    • 초반 책의 활용법이 맵핵같이 책을 체계적으로 이해할 수 있도록 도와준다.
    • 특히, 각 장마다 등장하는 컬럼 파트를 빼놓을 수 없는데 게임 개발에 큰 도움이 되는 실전 꿀팁들이 등장한다. 예를 들면 Pycharm과 같은 보다 뛰어난 IDE 활용법, 조이스틱 및 게임패드와의 연동법, 게임 개발 비하인드 스토리, 컴퓨터 게임 인공지능 등이 담겨있다. Pycharm_24p

책은 크게 2개의 파트로 나뉘는데, 타임라인 순으로 배웠던 흔적들을 기록해 보았다.

  • 프롤로그에서 PyGame까지(1 ~ 5장)
    • 입문편과 마찬가지로 초반부에는 Tkinter 모듈을 활용하여 거의 모든 게임에서 활용하는 기본 스킬을 학습한다. 정리해보면 아래와 같다.
      • after() 함수를 이용한 실시간 처리 구현
      • bind() 함수로 이벤트 처리
      • 배경 스크롤 : 움직이며 배경이 변하기 시작한다.
      • 애니메이션 효과 : 캐릭터 움직이기
      • 2차원 List 활용법 : 맵 데이터, 배경 처리
      • 인덱스와 타이머를 활용한 진행흐름 관리

      더불어 실전편답게 아래와 같은 몇가지 기본 기능이 추가되어 소개된다.

      • 바닥(들어갈 수 있는 장소)과 벽(들어갈 수 없는 장소)의 판정 방법
      • 히트체크 : 물체가 접촉했는지 판정하는 방법 (탄환에 맞았는지, 아이템을 주웠는지 등) 히트체크_33p
      • 삼각함수 활용법 : 다양한 도형이나 선을 그리는데 활용
    • 기초지식을 배운 후 본격적으로 닷-잇(Dot-Eat) 게임을 만든다. 닷-잇이란 팩맨과 같은 몬스터를 피하며 닷을 먹는 게임이다. 여기서는 “아슬아슬 펭귄 미로”라는 게임을 만든다. 닷잇_64p

    앞에서 배운 기본 기술을 활용한다.

    • 미로 맵 데이터
    • 실시간 처리
    • 캐릭터 애니메이션 처리 등의 기술

    추가로 위에서 배우진 않았지만 입문편에서 다룬 스킬도 활용한다.

    • 점수 계산법
    • 적 등장 및 처리

    메인 요소는 아니지만 아래와 같은 완성도를 높히기 위한 세세한 Tip들도 언급되어 있는데 일반 개발 서적에서는 보기 힘든 저자의 오랜 경험에서 묻어나온 일종의 편법(?)들이 흥미로웠다. 짧은 코드로도 다양한 효과를 대신할 수 있기 때문이다.

    • root 연산을 피해 속도를 높이거나 수학적 테크닉을 활용하는 방법
    • 캐릭터를 부드럽게 움직이는 법
    • 타이틀이나 엔딩화면 제작 등

    초반에 다루지 않았거나 입문편에서도 소개되지 않은 새로운 기법들은 다음과 같다.

    • 남은 수명 적용하기 : 기체 수, 체력, 시간 기준
    • 다양한 스테이지 만들기
    • 맵 에디터의 계층화

    • 본격적으로 PyGame을 소개한다. 앞서 배운 Tkinter와 달리 PyGame을 활용하면 몇가지 밑바닥 구현을 안해도 된다. 기본적으로 고속 처리가 가능해지고, 물체 간 겹치는 부분에 대한 처리가 필요없으며, 기본적으로 제공하는 API들이 간결하고 사용하기 편하다. 여기에선 Tkinter 기반에서 벗어나 이미지를 그리거나 상태를 변경시키거나 키-인을 다뤄보며 새롭게 익혀야 할 기능들을 살펴본다.

  • 실전시작! 슈팅게임과 카레이싱
    지금까지와는 차원이 다른 완성도 높은 게임들을 만들어본다. 슈팅 게임의 경우 삼각함수의 활용, 카레이싱 게임의 경우 유사 3D 구현이 대표적으로 배울 수 있는 핵심 기술이다.

    • 슈팅 게임
      미사일을 발사해 적 비행기를 격추시키는 게임을 만들어 본다.
      슈팅_197p

      새롭게 배울 수 있는 기법은 다음과 같다.

      • PyGame으로 고속 스크롤 구현
      • 플레이어 기체 움직이기
      • 탄환 처리 : 여러발 발사하기, 탄막 펼치기(2장에서 배웠던 삼각함수가 여기서 쓰인다.)
      • 적 기체 처리 : 격추 기능, 히트체크, 폭발 연출, 적 종류 늘리기, 보스 만들기
      • 사운드 등 멀티미디어 요소 고품질화
    • 카 레이싱 게임
      유사 3D 화면을 활용하여 자동차 경주하는 게임을 만든다. 카레이싱_338p

      새롭게 배울 수 있는 기술들은 아래와 같다.

      • 3D CG의 개념과 유사 3D : 원근법과 도로 그리기, 오르막과 내리막(역시 2장의 삼각함수가 쓰인다.)
      • 도로를 보다 실감나게 : 커브처리, 차선, 주변건물, 다양한 차 뒷모습 표현 등
      • 컴퓨터 경쟁 차량 만들기 및 히트 체크
      • 흐름처리(타이머와 인덱스), 랩 타임(1바퀴 도는데 걸린 시간) 처리, 차종 선택 기능 등
    • Game Center 208X
      앞서 만든 3개의 게임을 골라 실행할 수 있는 기능인 런처(Launcher)를 만든다. 지금까지 만든 것들을 대통합하면서 상용 게임과 맞먹는 완성도를 추구하기 위해 고군분투하는 저자의 노력에 감탄했다. 런쳐_498p


입문편과 실전편을 모두 읽고 구현하는데 1달이 넘는 시간이 걸렸다. 직장을 다니기에 퇴근 후 저녁 시간만을 활용했다. Python을 데이터 분석 목적으로 몇년 간 자주 활용했으며, 15년 가까이 다른 프로그래밍 언어를 만들어왔고, 대학때는 작은 게임을 만들어 본 경험이 있는 상태임을 감안할 때 결코 적지 않은 시간이 소요된 셈이다.

만약 이 책의 뛰어난 구성상의 도움이 없었다면, Python이 아닌 다른 언어였다면(C++이나 어셈 같은) 예제 하나를 만드는데만 1달의 시간이 걸렸을 것 같다. 그만큼 이 책은 방대한 내용을 아주 쉽고 생산성 높게 만드는 방법을 전수해 준다.

게임 관련 서적을 많이 통달하진 못했지만 이렇게 읽기 편하고 만들기 쉽고 짧은 시간내에 거의 모든 것을 만들 수 있게 해주는 책이 또 있을까?

개인적으로 정말 재미있는 단계는 지금, 즉, 책을 다 익히고 난 시점 이후이다. 기본기를 익혔으니 게임을 만들고 즐기며 떠올랐던 스스로의 아이디어를 녹이는 일을 시작할 수 있게 되었으니 말이다.

입문편 리뷰에서 소개했듯이 게임 업계의 꿈을 가지고 있거나, 게임 개발을 취미로 익히고 싶거나, Python으로 알고리즘 구현에 익숙해지고 싶은 분들에게 여러번 추천하고 싶다.






© 2019.04. by theorydb

Powered by theorydb