한 시간 만에 게임 만들기

$29.48
SKU
9788931478464
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Wed 03/12 - Tue 03/18 (주문일로부 10-14 영업일)

Express Shipping estimated by Fri 03/7 - Tue 03/11 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2025/01/31
Pages/Weight/Size 148*210*30mm
ISBN 9788931478464
Categories IT 모바일 > 게임
Description
간단한 C언어 지식 만으로 만드는 7가지 클래식 게임

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

소개하는 게임은 유명 게임에서 모티프를 딴 7가지 게임으로, 언어를 갓 배운 초보자에게 흥미를 주면서도 프로그래밍에 익숙해질 수 있도록 선정했다. 턴제 RPG, 테트리스, 삼국지 등 게임을 좋아하는 사람이 아니어도 한번쯤 들어보았을 게임들로 구성되어 있으며, 따라하면 도서 제목처럼 한 시간 정도면 프로그래밍할 수 있을 정도의 난이도와 분량이다. 순서는 어느 장부터 읽어도 상관 없으나, 난이도를 고려한다면 순서대로 읽는 것을 추천한다.
Contents
이 책의 개요
수록 타이틀
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년 노부나가의 천하포무 전야
전국 다이묘 열전
오다 노부나가
다케다 신겐
우에스기 겐신
도쿠가와 이에야스
호조 우지마사
아시카가 요시아키
모리 모토나리
다테 테루무네
시미즈 요시히사
조소카베 모토치카

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

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

각 성의 행동 루프를 작성한다
행동 순서를 랜덤으로 설정한다
각 성별로 돌아가며 턴을 진행한다
턴 순서를 표시한다
각 턴의 공통 메시지를 표시한다

플레이어의 다이묘를 선택할 수 있게 만든다
플레이어의 다이묘 선택 단계로 넘어간다
플레이어가 담당할 다이묘를 선택한다

진군 명령을 구현한다
성 간 연결 데이터를 작성한다
진군할 성을 키보드로 입력한다
진군 병력 수를 키보드로 입력한다

공성전을 구현한다
공성전을 발생시킨다
첫 메시지를 표시한다
공성전 전투를 구현한다
공성전 전투를 종료한다
공성전의 결과를 표시하고 전후 처리를 한다
공격 측이 이겼을 때의 처리를 구현한다
수비 측이 이겼을 때의 처리를 구현한다

적 측 다이묘 AI를 구현한다
인접한 적 측 성 리스트를 작성한다
가장 약한 적 측 성에 공격하는 코드를 작성한다
아군 전선의 성에 병력을 보내는 AI를 구현한다
적과 인접하는 아군의 성 리스트를 작성한다
병력을 보낼 목적지 성을 결정한다
보내는 병력 수를 결정한다
군사를 아군의 성으로 보낸다

이벤트를 추가한다
1년이 경과했을 때 병력 수를 변동시킨다
플레이어의 다이묘 가문이 멸망했을 때의 처리를 작성한다 417
게임 종료 시에 연표를 표시한다 419
게임 오버로 연표를 표시한다 421
게임이 종료하면 게임을 리셋한다
플레이어가 천하 통일했을 때의 처리를 작성한다 424
역사 이벤트 「혼노지의 변」을 추가한다
아케치 미쓰히데
도요토미 히데요시

Appendix 1 전국 시뮬레이션 게임을 삼국지로 개조한다
데이터를 변경하여 전국을 삼국으로!


전국 시뮬레이션 게임의 데이터를 변경하여 삼국지 게임으로 개조한다
「삼국지」는 무엇일까-사대 기서 중 하나 「삼국지연의」
삼국지 무장 열전
조조(맹덕)
유비(현덕)
손책(백부)
여포(봉선)
원소(본초)
유표(경승)
유장(계옥)
마등(수성)
공손찬(백규)
이각(치연)
시대 설정-196년 여포의 대두와 조조의 헌제 장악

게임 데이터를 변경한다
콘솔 설정
군주 데이터를 변경한다
주 데이터를 변경한다
샘플 지도를 그린다
정식 지도를 그린다
주 연결 정보를 변경한다

전국 시대 고유의 설정을 삼국지용으로 변경한다
병력 수 단위를 변경한다
메시지를 수정한다

Appendix 2 왕도 RPG 완전판
전투 장면에 필드 장면을 추가하여 완전한 RPG로 완성하자!


왕도 RPG의 세계를 완벽 재현하고 싶다!
제1장 전투 장면을 확장하여 완전한 RPG로 만들자
프로그램의 기본 구조를 작성한다
제1장의 프로그램을 확장한다
콘솔 설정

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

맵상에 플레이어를 추가한다
맵상에 플레이어를 그린다
플레이어를 키보드 입력으로 조작한다
플레이어가 들어갈 수 없는 칸에 이동할 수 없게 한다
플레이어의 이동에 맞춰서 화면을 스크롤한다

왕의 성을 구현한다
왕의 성 데이터를 추가한다
플레이어의 초기 위치를 설정한다
왕의 성을 그린다
왕의 성에서 필드로 나간다
필드에서 왕의 성으로 들어간다
인물과의 대화 이벤트를 구현한다
왕과의 대화 이벤트를 구현한다
공주와의 대화 이벤트를 구현한다

마왕성을 구현한다
마왕성 데이터를 추가한다
마왕성에 들어가게 한다
마왕성을 그린다
마왕성에서 필드로 나간다
마왕과의 대화 이벤트를 구현한다

전투를 발생시킨다
필드에서 조무래기 몬스터와 조우한다
공주가 상태를 회복시켜 준다
마왕과의 이벤트 전투를 발생시킨다
플레이어가 사망하면 왕에게 돌아간다

엔딩을 구현한다
Author
게임도칸,유세라,김은철
유튜브, 니코니코동화 등에서 게임 프로그래밍을 실황해 가며 라이브 코딩을 하는 동영상, 생방송을 송출 중입니다. 동영상 시리즈 한 시간 남짓으로 만들어 보았다는 게임을 제작부터 플레이하여 클리어하는 것까지를 전부 제공하고 있다.
유튜브, 니코니코동화 등에서 게임 프로그래밍을 실황해 가며 라이브 코딩을 하는 동영상, 생방송을 송출 중입니다. 동영상 시리즈 한 시간 남짓으로 만들어 보았다는 게임을 제작부터 플레이하여 클리어하는 것까지를 전부 제공하고 있다.