이전

리뷰 (2)

한줄평
평점 분포
  • 리뷰 총점10 100%
  • 리뷰 총점8 0%
  • 리뷰 총점6 0%
  • 리뷰 총점4 0%
  • 리뷰 총점2 0%
연령대별 평균 점수
  • 10대 0.0
  • 20대 0.0
  • 30대 0.0
  • 40대 10.0
  • 50대 0.0
리뷰 총점 종이책
파이썬으로 배우는 게임 개발 입문편
"파이썬으로 배우는 게임 개발 입문편" 내용보기
본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 2번째 도서인 실전편이다. 입문편과 유사한 개요 및 장점은 생략했으니 아래 입문편 리뷰를 참고하시기 바란다. 입문편 리뷰 입문편과의 차이점은 다음과 같다. Python을 어느정도 알고 있어야 한다. 입문편을 익혔다면 1, 3 ~ 5장은 건너 뛰어도 된다. 고난이도(?) 수학이 등장하기 시작한
"파이썬으로 배우는 게임 개발 입문편" 내용보기

본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 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으로 알고리즘 구현에 익숙해지고 싶은 분들에게 여러번 추천하고 싶다.

n********g 2021.03.17. 신고 공감 3 댓글 0
리뷰 총점 종이책
파이썬으로 배우는 게임 개발 실전편 리뷰
"파이썬으로 배우는 게임 개발 실전편 리뷰" 내용보기
"파이썬으로 배우는 게임 개발 - 실전편"을 리뷰를 하고자 합니다.   이 책은 이전 “파이썬으로 배우는 게임 개발 - 입문편”과 이어진 내용으로, 앞서 입문편의 경우 파이썬으로 위젯과 키입력 컨트롤을 통해 GUI 프로그램을 만들고, 간단하게 캐주얼한 2D 게임을 만드는 내용을 다룹니다. 실전편은 입문편의 기본적인 내용을 전제로 하여 본격적으로 완성도 높은 2D 게임을 만듭니
"파이썬으로 배우는 게임 개발 실전편 리뷰" 내용보기

"파이썬으로 배우는 게임 개발 - 실전편"을 리뷰를 하고자 합니다.

 

이 책은 이전 “파이썬으로 배우는 게임 개발 - 입문편”과 이어진 내용으로, 앞서 입문편의 경우 파이썬으로 위젯과 키입력 컨트롤을 통해 GUI 프로그램을 만들고, 간단하게 캐주얼한 2D 게임을 만드는 내용을 다룹니다. 실전편은 입문편의 기본적인 내용을 전제로 하여 본격적으로 완성도 높은 2D 게임을 만듭니다. 파이썬으로 배우는 게임 개발 입문편과 실전편은 각각 아래 링크에서 자세한 설명을 볼 수 있습니다.

- 실전편 : https://jpub.tistory.com/1107

- 입문편 : https://jpub.tistory.com/1095

 

짜임새있는 도서 구성

우선 내용과 상관없이 도서의 구성만으로도 칭찬하고 싶습니다. IT 도서 특성 상 소스 코드와 함께 주석을 삽입하거나 부가 설명이 내용에 들어가야 하는데, 소스와 주석을 분리하여 표현하여 구분도 쉬울 뿐만 아니라 설명이 같은 라인에 위치하기 때문에 이해도를 높이고 있습니다.

소스 코드 또한 적절한 컬러를 통해 이해도를 높입니다. 작은 부분이나 섬세하게 표현하고 있는 것이지요. 의외로 이런 부분을 신경쓰고 있는 도서가 많지 않다보니 도서 기획 단계서 부터 작가의 의도를 엿볼 수 있습니다.

 

간혹 소스 코드의 폰트 크기가 크고, 코드 양도 도서의 반을 차지하는 도서도 볼 수 있는데, 읽다보면 도서 양은 많으나 무성의함이 아닐까란 생각이 들면서 맥이 빠질 수 있고, 읽는 즐거움이 사라질 수 있는 부분이어서 저는 파이썬으로 배우는 게임 개발 - 입문편에 이어서 실전편도 구성에 좋은 짜임새를 갖춘 도서라 생각이 됩니다.

 

 

또한 도서의 전반적인 구성은 페이지를 나가 수록 살이 붙어지는 형식인데 - 입문편이 다양한 게임을 제작한다면 실전편은 한나의 게임에 들어가는 요소요소에 대한 살을 붙이는 구성입니다 - 독자로 하여금 이전 소스와 현재 소스와의 차이를 마커를 사용하여 분명하게 알려주고 있습니다. 입문편과 마찬가지로 독자의 이해도를 높이고자 하는 표현의 배려가 많다는 것은 내용을 떠나 도서의 소장 가치를 높인다고 생각됩니다.

 

기획 시나리오부터 고려한 본격적인 실전 게임 제작

입문편에 비해 실전편은 100 페이지 이상 늘어난 도서양을 가집니다. 입문편이 UI 위젯 사용을 위주로 다양한 2D 게임 제작을 위한 기초를 다뤘다면, 실전편은 액션과 슈팅, 레이싱 게임으로 세부분으로 나눌 수 있습니다.

 

 

만일 게임을 주로 주요 알고리즘만 다룬다면 어찌보면 게임 제작의 일부분만을 배웠을터인데, 모든 게임은 저자가 전문 게임 프로그래머답게 시나리오 기획부터 시작하고 있습니다. 걱정하지 마십시오. 기획부터 코딩까지 노하우가 없더라도 저자의 가이드를 받고 그저 따라가면 됩니다. 액션 게임 개발을 위한 기초는 1장에서부터 배울 수 있습니다.

 

액션 게임의 공간에 해당하는 캔버스(Canvas) 안의 맵에서 이동하려면 바닥과 이동 제한이 필요한 벽이 필요합니다. 그래서 바닥과 벽을 판단하기 위해서 좌표의 위치에 무엇이 있는지 판정해야 합니다. 2장부터는 이러한 맵을 기반으로 물체의 이동과 충돌을 다룹니다. 물체와 물체가 만나면 이동에 제한을 가해야 하기 때문에 히트 체크가 필요합니다.

사각형뿐만 아니라 원현의 히트 체크 또한 고려해야 합니다. 도서에서는 초록색 원과 주황색 원이 닿으면 밝은 연두색으로 바뀌는 것으로 "히트"를 표시하고 있습니다. 여기에서 수학의 기본에 해당하는 sin, cos, tan 삼각함수를 통해 캐릭터의 움직임을 예측하거나 이펙트의 자취를 화려하게 그릴 수 있습니다. 이러한 계산은 액션 게임 제작 이후에 이어지는 슈팅 게임 제작에서 삼각함수를 활용해 적기 이동 방향 계산이나 탄환 방사형 발사 등에 사용됩니다.

Pygame

Chapter 5장부터는 pygame을 이용하여 슈팅 게임을 제작하는 방법을 배웁니다. pygame은 SDL(Simple DirectMedia Layer) 기반으로 파이썬으로 이미지 변환이나 그래픽 처리, 키 입력, 사운드 재생과 같은 멀티미디어 처리가 가능하기 때문에 게임 제작에 적합한 오픈 소스이고 파이썬 기반의 일부 레트로 게임들도 Pygame에 기반하고 있습니다. pygame에서의 사용자 입력 이벤트는 pygame.event 모듈의 pygame.event.get() 함수를 통해 알 수 있습니다. 이를 통해서 사용자 입력 처리하며, 게임 상태를 업데이트 하면서 갱신된 내용을 화면에 계속 그려 넣는다. 이것이 Pygame의 게임 루프이며, 루프를 통해 사용자 입력 이벤트와 상태 체크, 화면 갱신을 지속적으로 이어갑니다.

 

도서를 읽으면서 저자가 누락하지 않고 삽입해서 좋았던 내용인 시나리오와 같은 기획적인 내용입니다. 매 게임 제작 초반에 아래와 같이 무엇을 제작하려고 하는지 게임 내용과 스토리 보드를 시작으로 내용을 구성하였습니다.

비록 많은 부분을 할애한 것은 아니지만, 스토리 보드가 있어야 게임을 어떠한 방향으로, 어떤 구성을 갖출지 틀이 잡히기 때문에 중요한 부분이라고 생각됩니다.  또한 게임의 기본적인 동작만 구현하는 것이 아니라 완성도가 높은 게임은 끊임없이 질문을 하는 것이죠. 

 

마지막으로 게임 개발은 확실히 쉽지 않는 분야라고 생각합니다. 기획자와 디자이너를 필요로 할뿐만 아니라 전문 게임을 위해서는 프로그래머도 각자의 역할에 따라 게임플레이어 프로그래머와 엔진 프로그래머, 그래픽/렌더링 프로그래머, 네트워크/서버 프로그래머를 필요로 합니다. 더욱이 인공지능과 UI 프론트엔드, 사운드 뿐만 아니라 서버 운영을 위한 인프라 엔지니어 등 정말로 필요한 인원들도 많겠지요. 게다가 완성도 높은 게임을 위해서는 게임 관련 이론 뿐만 아니라 게임 엔진을 기반으로 제작이 필요한데, 엔진 자체에 대한 학습도 오랜기간 필요합니다.

저자의 이력을 보면 알 수 있겠지만 게임 프로그래밍을 위해서 다양한 프로그래밍 언어도 사용될 뿐만 아니라 다양한 어플리케이션 개발 분야가 결합되어야 하고 여기에 본인이 열정이 더해져야 완성도 있는 게임도 만들 수 있고, 해당 분야의 전문가가 될 것이 분명합니다. 

 

앞서 언급한 적이 있지만, 전문적인 게임 프로그래밍을 위해서 본 도서를 선택하여 학습을 했던 것은 아니었고 처음에는 파이썬으로 GUI 컨트롤을 할 수 있다는 점에 흥미가 생겨서 독서를 시작하였습니다. GUI 컨트롤이 가능하다보니 이를 이용하여 간단한 2D 게임 제작이 가능하게 된 것이고, 실전편에서 저자가 지도해준 맵 제작과 물체 간 히트체크를 하는 방법을 따라가보니 액션과 슈팅 게임, 레이싱 게임 제작이 가능하게 된 것이었습니다. 도서를 읽게 되면서 얻게 된 지금의 흥미가 게임 제작으로 이어질지는 모르겠으나, 저처럼 파이썬으로 기본 문법을 익히고 빌드 자동화나 머신러닝에 이어 웹서비스 개발까지 관심이 있는 분이라면 UI 기반의 위젯 컨트롤과 나아가서 게임 제작에 도전해보시길 바랍니다.

i******n 2021.03.01. 신고 공감 1 댓글 0