[리뷰] 파이썬으로 배우는 게임 개발 실전편
in Review on Review, Book, Python, Game, Pygame, 닷잇, 슈팅, 레이싱, 삼각함수, 유사3d, 런쳐, 남코, 닌텐도, 코나미
제이펍
출판사의"파이썬으로 배우는 게임 개발 실전편(히로세 츠요시 저/김연수 역)"
를 읽고 작성한 리뷰입니다.
본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 2번째 도서인 실전편이다. 입문편과 유사한 개요 및 장점은 생략했으니 아래 입문편 리뷰를 참고하시기 바란다.
입문편과의 차이점은 다음과 같다.
- Python을 어느정도 알고 있어야 한다.
- 입문편을 익혔다면 1, 3 ~ 5장은 건너 뛰어도 된다.
- 고난이도(?) 수학이 등장하기 시작한다. (특히 삼각함수)
- 3차원이 세계에 발을 내딛는다.(유사 3D를 구현)
- 작지만 효과 넘치는 디테일한 Tip들을 얻을 수 있다.
- 상용 게임에 가까운 완성도를 추구한다.(런쳐 개발 등)
입문편 리뷰에서 다 언급하지 못한 장점도 몇가지 추가할까 한다.
Python을 선택한 것은 신의 한수다. 실전과 취미의 적절한 경계선이라 생각한다. 이 책 본문에도 등장하는 슈팅게임 만들기와 비교해 보면, 대학시절 슈팅게임을 만들어보면서 미사일이 느려서 인라인 어셈과 C++을 사용했던 기억을 떠올리면 난이도도, 코드량도 10배는 향상된 느낌이다.
구성도 내용만큼이나 뛰어나다.
- 덕후스럽지만 2분의 여성 교수님과 조교님이 진행을 잘 이끄신다.
- 초반 책의 활용법이 맵핵같이 책을 체계적으로 이해할 수 있도록 도와준다.
- 특히, 각 장마다 등장하는
컬럼
파트를 빼놓을 수 없는데 게임 개발에 큰 도움이 되는 실전 꿀팁들이 등장한다. 예를 들면 Pycharm과 같은 보다 뛰어난 IDE 활용법, 조이스틱 및 게임패드와의 연동법, 게임 개발 비하인드 스토리, 컴퓨터 게임 인공지능 등이 담겨있다.
책은 크게 2개의 파트로 나뉘는데, 타임라인 순으로 배웠던 흔적들을 기록해 보았다.
- 프롤로그에서 PyGame까지(1 ~ 5장)
- 입문편과 마찬가지로 초반부에는 Tkinter 모듈을 활용하여 거의 모든 게임에서 활용하는
기본 스킬
을 학습한다. 정리해보면 아래와 같다.- after() 함수를 이용한 실시간 처리 구현
- bind() 함수로 이벤트 처리
- 배경 스크롤 : 움직이며 배경이 변하기 시작한다.
- 애니메이션 효과 : 캐릭터 움직이기
- 2차원 List 활용법 : 맵 데이터, 배경 처리
- 인덱스와 타이머를 활용한 진행흐름 관리
더불어 실전편답게 아래와 같은 몇가지 기본 기능이
추가
되어 소개된다.- 바닥(들어갈 수 있는 장소)과 벽(들어갈 수 없는 장소)의 판정 방법
히트체크
: 물체가 접촉했는지 판정하는 방법 (탄환에 맞았는지, 아이템을 주웠는지 등)삼각함수
활용법 : 다양한 도형이나 선을 그리는데 활용
- 기초지식을 배운 후 본격적으로
닷-잇(Dot-Eat)
게임을 만든다. 닷-잇이란 팩맨과 같은 몬스터를 피하며 닷을 먹는 게임이다. 여기서는 “아슬아슬 펭귄 미로”라는 게임을 만든다.
앞에서 배운 기본 기술을 활용한다.
- 미로 맵 데이터
- 실시간 처리
- 캐릭터 애니메이션 처리 등의 기술
추가로 위에서 배우진 않았지만
입문편
에서 다룬 스킬도 활용한다.- 점수 계산법
- 적 등장 및 처리
메인 요소는 아니지만 아래와 같은 완성도를 높히기 위한 세세한 Tip들도 언급되어 있는데 일반 개발 서적에서는 보기 힘든 저자의 오랜 경험에서 묻어나온 일종의
편법(?)
들이 흥미로웠다. 짧은 코드로도 다양한 효과를 대신할 수 있기 때문이다.- root 연산을 피해 속도를 높이거나 수학적 테크닉을 활용하는 방법
- 캐릭터를 부드럽게 움직이는 법
- 타이틀이나 엔딩화면 제작 등
초반에 다루지 않았거나 입문편에서도 소개되지 않은
새로운 기법
들은 다음과 같다.- 남은 수명 적용하기 : 기체 수, 체력, 시간 기준
- 다양한 스테이지 만들기
맵 에디터의 계층화
- 본격적으로 PyGame을 소개한다. 앞서 배운 Tkinter와 달리 PyGame을 활용하면 몇가지 밑바닥 구현을 안해도 된다. 기본적으로 고속 처리가 가능해지고, 물체 간 겹치는 부분에 대한 처리가 필요없으며, 기본적으로 제공하는 API들이 간결하고 사용하기 편하다. 여기에선 Tkinter 기반에서 벗어나 이미지를 그리거나 상태를 변경시키거나 키-인을 다뤄보며 새롭게 익혀야 할 기능들을 살펴본다.
- 입문편과 마찬가지로 초반부에는 Tkinter 모듈을 활용하여 거의 모든 게임에서 활용하는
실전시작! 슈팅게임과 카레이싱
지금까지와는 차원이 다른 완성도 높은 게임들을 만들어본다. 슈팅 게임의 경우 삼각함수의 활용, 카레이싱 게임의 경우 유사 3D 구현이 대표적으로 배울 수 있는 핵심 기술이다.슈팅
게임
미사일을 발사해 적 비행기를 격추시키는 게임을 만들어 본다.
새롭게 배울 수 있는 기법은 다음과 같다.
- PyGame으로 고속 스크롤 구현
- 플레이어 기체 움직이기
- 탄환 처리 : 여러발 발사하기, 탄막 펼치기(2장에서 배웠던
삼각함수
가 여기서 쓰인다.) - 적 기체 처리 : 격추 기능, 히트체크, 폭발 연출, 적 종류 늘리기, 보스 만들기
- 사운드 등 멀티미디어 요소 고품질화
카 레이싱
게임
유사 3D 화면을 활용하여 자동차 경주하는 게임을 만든다.새롭게 배울 수 있는 기술들은 아래와 같다.
- 3D CG의 개념과
유사 3D
: 원근법과 도로 그리기, 오르막과 내리막(역시 2장의삼각함수
가 쓰인다.) - 도로를 보다 실감나게 : 커브처리, 차선, 주변건물, 다양한 차 뒷모습 표현 등
- 컴퓨터 경쟁 차량 만들기 및 히트 체크
- 흐름처리(타이머와 인덱스), 랩 타임(1바퀴 도는데 걸린 시간) 처리, 차종 선택 기능 등
- 3D CG의 개념과
Game Center 208X
앞서 만든 3개의 게임을 골라 실행할 수 있는 기능인런처(Launcher)
를 만든다. 지금까지 만든 것들을 대통합하면서 상용 게임과 맞먹는 완성도를 추구하기 위해 고군분투하는 저자의 노력에 감탄했다.
입문편과 실전편을 모두 읽고 구현하는데 1달이 넘는 시간이 걸렸다. 직장을 다니기에 퇴근 후 저녁 시간만을 활용했다. Python을 데이터 분석 목적으로 몇년 간 자주 활용했으며, 15년 가까이 다른 프로그래밍 언어를 만들어왔고, 대학때는 작은 게임을 만들어 본 경험이 있는 상태임을 감안할 때 결코 적지 않은 시간이 소요된 셈이다.
만약 이 책의 뛰어난 구성상의 도움이 없었다면, Python이 아닌 다른 언어였다면(C++이나 어셈 같은) 예제 하나를 만드는데만 1달의 시간이 걸렸을 것 같다. 그만큼 이 책은 방대한 내용을 아주 쉽고 생산성 높게 만드는 방법을 전수해 준다.
게임 관련 서적을 많이 통달하진 못했지만 이렇게 읽기 편하고 만들기 쉽고 짧은 시간내에 거의 모든 것을 만들 수 있게 해주는 책이 또 있을까?
개인적으로 정말 재미있는 단계는 지금, 즉, 책을 다 익히고 난 시점 이후이다. 기본기를 익혔으니 게임을 만들고 즐기며 떠올랐던 스스로의 아이디어를 녹이는 일을 시작할 수 있게 되었으니 말이다.
입문편 리뷰에서 소개했듯이 게임 업계의 꿈을 가지고 있거나, 게임 개발을 취미로 익히고 싶거나, Python으로 알고리즘 구현에 익숙해지고 싶은 분들에게 여러번 추천하고 싶다.