한 시간 만에 게임 만들기
Description
간단한 C언어 지식 만으로 만드는 7가지 클래식 게임
게임 엔진의 대중화 이후 게임 개발은 예전보다 매우 쉬워졌지만, 여전히 초보자에게는 높은 벽으로 느껴집니다. 그 이유는 여러 가지가 있지만 가장 큰 이유를 하나 꼽자면 ‘추가로 배워야 할 것이 너무 많다’일 겁니다. 대부분의 작업을 도와주는 엔진을 사용하더라도 엔진의 사용법을 추가로 익혀야만 하며 그것만으로도 별도의 도서가 만들어질 정도입니다. 이 도서는 이러한 사전 지식 없이, 오직 간단한 C언어 지식만으로 게임 개발에 도전할 수 있도록 언어 기능 이외의 다른 요소는 전혀 사용하지 않은 게임들을 만들어 보는 도서입니다..

소개하는 게임은 유명 게임에서 모티프를 딴 7가지 게임으로, 언어를 갓 배운 초보자에게 흥미를 주면서도 프로그래밍에 익숙해질 수 있도록 선정했습니다. 턴제 RPG, 테트리스, 삼국지 등 게임을 좋아하는 사람이 아니어도 한번쯤 들어보았을 게임들로 구성되어 있으며, 따라하면 도서 제목처럼 한 시간 정도면 프로그래밍할 수 있을 정도의 난이도와 분량입니다. 순서는 어느 장부터 읽어도 상관 없으나, 난이도를 고려한다면 순서대로 읽는 것을 추천합니다.

저자

게임도칸

저자:게임도칸
유튜브,니코니코동화등에서게임프로그래밍을실황해가며라이브코딩을하는동영상,생방송을송출중입니다.동영상시리즈한시간남짓으로만들어보았다는게임을제작부터플레이하여클리어하는것까지를전부제공하고있습니다.
유튜브youtube.com/gamedokan
Xx.com/gamedokan
메일gamedokan@me.com.

역자:김은철
(주)아이티에스대표이사/데이터사이언티스트
데이터과학자로서빅데이터분석및AI모델링사업을하고있다.
주요저서로는<게임으로배우는파이썬>,<스위프트로만드는실전강좌!아이폰앱프로그래밍>,<예제로배우는핵심패턴안드로이드프로그래밍>,<유니티를이용한VR앱개발>,<그림으로배우는웹구조>,<그림으로배우는파이썬>,<그림으로배우는C#>,<그림으로배우는SQL>,<모두의알고리즘>,등30여권의번역서가있다.

역자:유세라
현재일본전문번역가로활동하고있으며,역서로는<게임으로배우는파이썬>,<스위프트로만드는실전강좌!아이폰앱프로그래밍>,<예제로배우는핵심패턴안드로이드프로그래밍>,<유니티를이용한VR앱개발>,<유니티를몰라도만들수있는유니티2D게임제작>,<유니티교과서>,<구글코랩으로배우는인공지능기술>,<파이썬플라스크웹앱입문>,<엑셀X파이썬코드레시피125>,<처음만나는AI수학with파이썬>,<그림으로배우는웹구조>,<그림으로배우는파이썬>,<그림으로배우는C#>,<그림으로배우는SQL>등30여권의번역서가있다.

목차


이책의개요
수록타이틀
C++콘솔프로그램의개발환경을설정한다
C++프로그램의작성과이책을읽는방법
샘플코드다운로드

제1장왕도RPG의전투장면
명령선택과메시지표시를통한턴제배틀
텍스트기반으로진행하는RPG의전투장면

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔의설정

캐릭터의상태를표시한다
플레이어의상태를작성한다
플레이어의상태를초기화한다
플레이어의상태를표시한다
몬스터의상태를작성한다
몬스터의상태를초기화한다
몬스터를표시한다

전투의흐름을작성한다
전투시작메시지를표시한다
명령데이터를작성한다
각캐릭터에게공격을하게만든다

명령선택인터페이스를구현한다
명령을선택하는함수를호출한다
명령목록을표시한다
명령을선택하는커서를추가한다
커서를그린다
키보드입력으로커서를조작한다
선택한명령을결정한다

싸우는명령을구현한다
공격대상을설정한다
상대에게주는대미지를계산한다
상대에게대미지를준다
적을쓰러뜨렸을때의처리를구현한다

마왕강림!-적을최종보스로바꾼다
최종보스데이터를추가한다
몬스터를최종보스로바꾼다
플레이어가사망했다는메시지를표시한다
용사의능력치를다시작성하여강하게만든다
도망치는명령을구현한다

회복주문명령을구현한다
주문을발동시켜HP를회복시킨다
주문을외우면MP를소모하게만든다
MP가부족하면주문을외우지못하게만든다

최종결전-타도마왕!

제2장라이프게임
단순한규칙에서생성되는복잡한생명시뮬레이션
라이프게임

단순한규칙에서발전되는복잡한생명시뮬레이션
라이프게임의탄생과발전
라이프게임의규칙

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

필드를그린다
필드의데이터를작성한다
필드를그린다

대상셀이몇개의살아있는셀과인접해있는지를센다
칸마다인접하는칸의상태를체크한다
필드법위밖의좌표를무시한다
필드가무한히루프하도록구현한다
인접하는살아있는셀의수를센다

세대를진행시킨다
키보드입력으로시뮬레이션을진행시킨다
시뮬레이션함수를호출한다
각셀의다음세대에서의생사를판정한다
시뮬레이션결과를화면에반영시킨다
시뮬레이션을일정시간마다자동진행시킨다

임의의패턴을필드의중심에배치한다
필드를넓게확장한다
패턴을필드에써넣는함수를작성한다
패턴을필드에써넣는함수를테스트한다

패턴의예
고정물체
진동자
고정물체(주기2)
펄서(주기3)
팔각형(주기5)
은하(주기8)
펜타데카슬론(주기15)
장수형
R-펜토미노
다이하드
도토리
이동물체
글라이더
라이트급우주선
미들급우주선
헤비급우주선
번식형
글라이더총
작은패턴
칙칙폭폭열차
맥스
직선에서신비로운무늬
십자에서신비로운무늬

제3장리버시
모눈단위의데이터처리와AI구현
2인대전보드게임의정석「리버시」

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

모눈판을그린다
모눈판을초기화한다
모눈판을그린다
모눈판의초기배치를설정한다

키보드입력으로칸을선택한다
커서를그린다
커서를키보드입력으로조작한다
커서의위치를초기화한다

키보드입력으로돌을놓는다
현재턴을표시한다
커서의좌표에돌을놓는다
돌을놓으면턴을넘긴다

돌을놓을수있는지판정한다
돌을놓을수없는경우의처리를구현한다
이미돌이놓여있는칸에는놓을수없게한다
지정한칸에돌을놓을수있을지판정한다

끼운상대의돌을뒤집는다
돌을뒤집는기능을추가한다
돌을뒤집는다

어디에도돌을놓을수없는경우패스한다
돌을놓을수있는곳이있는지판정하는함수를작성한다
어디에도돌을놓을수없으면패스한다

승패결과를표시한다
결과표시로바뀐다
승패를판정하여결과를표시한다
게임이종료되면초기화한다

게임모드선택화면을제작한다
게임모드선택화면으로전환한다
게임모드를목록으로표시한다
게임모드를키보드입력으로선택한다
커서를표시한다
키보드입력으로선택을바꾼다
선택을결정하고모드선택화면을빠져나간다
모드별로AI담당을설정한다

돌을놓는칸을자동으로판단하는AI를구현한다
AI담당으로전환한다
놓을수있는칸리스트를작성한다
놓을수있는곳중에서랜덤으로놓는다
AI턴에는커서를안보이게한다

AI간대전을관전하는모드를추가한다

제4장낙하물퍼즐게임
떨어지는블록을맞춰서지우는실시간퍼즐
퍼즐게임의정석,낙하물퍼즐

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

필드를제작한다
게임을초기화하는함수를추가한다
화면을그리는함수를추가한다
필드의데이터를작성한다
필드를그린다

낙하블록을추가한다
낙하블록의종류를정의한다
낙하블록의형태를정의한다
낙하블록의데이터를작성한다
낙하블록을초기화한다
낙하블록을그린다

낙하블록을키보드로조작한다
키보드입력을한다
낙하블록을이동시킨다
낙하블록을회전시킨다

블록을실시간으로떨어뜨린다
게임을실시간으로진행시킨다
블록을떨어뜨린다

낙하블록과필드위블록과의충돌판정을구현한다
낙하블록과필드의충돌판정함수를작성한다
낙하블록과필드의충돌판정을실시한다
낙하블록을키보드입력으로조작할때의충돌판정
낙하블록이자동낙하할때필드와의충돌판정

낙하블록을필드에쌓는다
새로운낙하블록을발생시킨다
블록이천장까지쌓이면게임오버로한다

가로로채워진행의블록을지운다
채워진행의블록을지우는함수를작성한다
블록이가로로채워졌는지판정한다
채워진1행을삭제한다
지워진행위의블록을아래로1칸이동시킨다

제5장도트잇게임
실시간액션과4종의AI
비디오게임초기에대히트한「도트잇」

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

미로를작성한다
미로데이터를작성한다
미로를초기화한다
미로를그린다

플레이어를생성한다
플레이어의데이터를생성한다
플레이어를그린다
플레이어의초기좌표를설정한다
플레이어를조작한다
플레이어와벽의충돌판정을실시한다
플레이어를상하좌우로루프시킨다
플레이어가도트를먹게한다

변덕몬스터를추가한다
변덕몬스터의데이터를작성한다
변덕몬스터를그린다
일정시간마다실행되는실시간처리를구현한다
몬스터종류에따라AI처리를분기시킨다
변덕몬스터의이동목적지를얻는다
변덕몬스터를움직인다
변덕몬스터가벽을통과하지못하게한다
변덕몬스터가되돌아가지않게한다

추적몬스터를추가한다
추적몬스터의데이터를추가한다
추적몬스터를그린다
경로탐색알고리즘의해설
두점간의최단경로를탐색하는기능을구현한다
탐색시작지점에서각칸까지의최단거리를구한다
탐색자의칸에서각칸까지의최단경로를구한다
추적몬스터를움직인다
추적몬스터가벽을통과하지못하게한다
추적몬스터가되돌아오지않게한다

전진몬스터를추가한다
전진몬스터의데이터를추가한다
전진몬스터를그린다
전진몬스터의이동목적지를얻는다
플레이어의방향을얻는다
플레이어의3칸앞좌표를얻는다
전진몬스터를움직인다

협공몬스터를추가한다
협공몬스터의데이터를추가한다
협공몬스터를그린다
협공몬스터를움직인다

게임오버기능을제작한다
플레이어와몬스터가겹쳤는지판정하는기능을제작한다
게임오버가되면게임을리셋한다
몬스터가플레이어에게돌진해온경우도게임오버처리한다
게임오버메시지를화면중앙에표시한다

엔딩화면을제작한다
도트를전부먹었는지판정한다
엔딩화면을작성한다
게임을클리어하면엔딩화면을표시한다

제6장유사3D던전게임
아스키아트로유사3D를재현

비디오게임초기의RPG표준,유사3D던전
컴퓨터RPG의기원「위저드리」의탄생
「위저드리」가끼친영향
유사3D시점의기믹에접근하다

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

디버그용맵을그린다
미로데이터를작성한다
미로맵을그린다

미로를랜덤으로생성한다
미로를생성하는알고리즘
미로를랜덤으로생성하는함수를호출한다
미로의모든칸을벽으로막는다
벽을파는함수를작성한다
벽을파도좋은지아닌지를판정한다
첫통로를생성한다
파야하는벽을모두파낸다

미로를이동할수있게만든다
맵에플레이어를표시한다
키보드입력으로플레이어를조작한다
방위를전환한다
진행방향으로전진한다

미로를유사3D화하여그린다
유사3D용데이터를작성한다
미로의아스키아트를작성한다
아스키아트참조용테이블을작성한다
시야내의상대좌표테이블을작성한다
미로를유사3D시점으로그리는함수를호출한다
그리기용의아스키아트를합성한다
미로를그린다

퀘스트를추가한다
플레이어가목표지점에도달했는지판정한다
엔딩메시지를표시한다

제7장전국시뮬레이션게임
히데요시도깜짝놀랄걸!하룻밤사이에전국시뮬레이션
「진군」명령만으로만드는단순한전국시뮬레이션게임

이번장의전국시뮬레이션게임의시대배경
시대설정-1570년노부나가의천하포무전야
전국다이묘열전
오다노부나가
다케다신겐
우에스기겐신
도쿠가와이에야스
호조우지마사
아시카가요시아키
모리모토나리
다테테루무네
시미즈요시히사
조소카베모토치카

프로그램의기본구조를작성한다
프로그램의베이스부분을작성한다
콘솔설정

지도를그린다
다이묘데이터를작성한다
성데이터를작성한다
연도데이터를작성한다
지도를그리는함수를호출한다
지도를그린

출판사 서평

주요내용

제1장왕도RPG의전투장면
명령선택과메시지표시를통한턴제배틀
드래곤퀘스트등으로대표되는일본식턴제RPG게임을본따,적과전투하는씬을만들어봅니다.슬라임같은간단한적부터,회복기능을구현하여강한보스와도맞서싸웁니다!

재2장라이프게임
단순한규칙에서생성되는복잡한생명시뮬레이션
특정한규칙을정해주면그에맞게스스로움직이거나모습을바꾸는신비한게임인라이프게임을만듭니다.라이프게임의핵심규칙을구현해보고,자동진행되도록코드를개선합니다.

제3장리버시
모눈단위의데이터처리와AI구현
오셀로라는이름으로알려진간단한보드게임인리버시를직접구현해봅니다.혼자서는할수없는게임이므로같이플레이할상대인AI를만들고,심지어는AI끼리의대전을관전하는모드도만들어봅니다!

제4장낙하물퍼즐게임
떨어지는블록을맞춰서지우는실시간퍼즐
추억의게임테트리스와도같은낙하물퍼즐게임을만들어봅니다.낙하블록과지면을충돌판정을하여줄을지우는제대로된낙하물게임입니다.

제5장도트잇게임
실시간액션과4종의AI
팩맨이떠오르는DotEat게임입니다.미로를만들고,플레이어를추적하는NPC와그AI도만들어서게임을성립시킵니다.

제6장유사3D던전게임
아스키아트로유사3D를재현
선을이용해마치3D공간을탐험하는듯한기분을주는유사3D던전게임을만들어봅니다.랜덤으로맵을구성하고,내위치와그3D화면을만들어플레이해보면마치둠을플레이하는느낌을받을수있습니다.

제7장전국시뮬레이션게임
히데요시도깜짝놀랄걸!하룻밤사이에전국시뮬레이션
일본전국시대를배경으로삼아,일본전역을통일하는시뮬레이션게임,노부나가의야망의간단한버전과도같은게임을만들어봅니다.각성의다이묘가되어,군사를출병시켜각성을함락시켜세력을키워나가봅니다.통일하면승리의연표가,패배시에는패배까지의연표가나오도록만들어봅니다.

Appendix1전국시뮬레이션게임을삼국지로개조한다
데이터를변경하여전국을삼국으로!
조금은어색할전국시대게임의배경을수정하여,삼국지게임으로만들어봅니다.맵과데이터를수정하는것만으로거의다른게임이되는듯한느낌을줄수있습니다.
Appendix2왕도RPG완전판
전투장면에필드장면을추가하여완전한RPG로완성하자!
1장의전투장면뿐인게임에필드를추가하여,완전한RPG로확장시킵니다.스타팅포인트라고할수있는왕성과,마지막결전을할마왕성을만들어시작과끝을완성시킵니다.

저자의말

이책은컴퓨터게임의각장르를대표하는7편의게임제작방법을실제개발절차순으로설명합니다.프로그래밍경험이없더라도차례대로따라가면반드시완성할수있도록구성했습니다.언어기능설명은하지않지만,매과정마다동작확인을하므로각명령문의역할을이해하기쉽게구성했습니다.
사용하는앱은통합개발환경“VisualStudio”뿐이며특별한라이브러리나기존코드는전혀사용하지않고모든것을처음부터작성합니다.다만,키보드입력처리에Windows고유의함수를사용하므로Windows전용프로그램이라고할수있습니다.
이책에서사용하는VisualStudio버전은무료판“Community2022”입니다.버전이다르면프로젝트작성방법등이다를수있습니다.사용하는OS는“Windows11”이지만,“Windows10”에서도동작을확인했습니다.
사용하는언어는“C언어”의상위호환인“C++”입니다.Java,C#,JavaScript등다른언어는알지만C++는모르는사람도이해하기쉽도록가능한한C++고유의기능(포인터등)은사용하지않으며다른언어와공통또는동등한기능을사용합니다.
작성하는게임의그래픽은콘솔(사용자와컴퓨터가문자열의입출력을통해대화하는창)에출력하는아스키아트(ASCIIART)만으로재현합니다.여기에는‘그래픽이있는경우에비해작업량이줄어든다’는장점과‘아스키아트만으로도게임을만들수있다!’는재미가있습니다.