본 캠프 TIL

26.05.18 TIL / C++ Text RPG 수정, 게임 개발자를 위한 C++ 문법

jh009 2026. 5. 18. 21:27

오늘 한 것

- C++ Text RPG 수정

- 게임 개발자를 위한 C++ 문법 강의 듣기 완료


내일 할 것

- C++ Text RPG 도전과제 해보기 + 최종본 완성

- 밀린 CodeKata 하기

- 강의 들을 거 있으면 듣고 정리하기 


느낀 점

C++ Text RPG 수정 중에서

전직 시스템에서 1 ~ 4번이 아닌 다른 숫자 입력 시 생기는 오류,

[공격], [방어], [도주] 행동을 추가 중 [도주] 에서 굉장히 힘들었다.

 

default: 에 isSuccess = false; 추가하는 것을 모르고 있었다. 한참을 찾았던 것 같다.

 

그리고 [도주] 기능 추가... 정말 힘들었다. 

 

#include <cstdlib> 
#include <ctime> 
srand(static_cast<unsigned int>(time(nullptr)));

 

이 3가지를 알아내고 무슨 뜻인지 찾고를 반복하는 하루였다.

그래도 내가 원하는대로 수정이 다 되었으니 만족한다... 

.

.

.

그리고.. Unreal_9기 5월 3주차 우수 TIL로 뽑혀 굉장히 기쁘다.

이번 선정은 잘했다는 칭찬보다는 앞으로도 이 방향을 잃지 말고 더 열심히 하라는 응원의 의미라고 생각한다.

잠깐의 기쁨에 안주하지 않고, 늘 그랬듯 내가 부족한 부분을 냉정하게 짚어내며 묵묵히 정진해야겠다.

 

 


C++ Text RPG 필수 구현 기능 수정 

STEP 3 - 스탯 관리 메뉴

1. 공격력과 방어력 증가가 계속 적용이 가능하던 것을 한 번만 적용되게 수정하였음.

bool isPowerUpgrade = false;
bool isDefenceUpgrade = false;
를 사용하여 적용 되지 않을 땐 false, 적용 된 후엔 true 가 되어 한 번만 적용이 되도록 수정함.

 

 


2. 공격력과 방어력 증가를 10 증가로 바꾸어 RPG 진행이 너무 쉽지 않도록 막았음.  

power *= 2; 공격력 2배 증가에서 → power += 10; 공격력 10 증가
defence *= 2; 방어력 2배 증가에서 → defence += 10; 방어력 10 증가

 

[ 3번: 공격력 2배 / 4번: 방어력 2배 ] → [ 3번: 공격력 증가 / 4번: 방어력 증가 ] 로 변경


STEP 4 - Player 클래스 + 직업 선택

- 전직 시스템에서 1 ~ 4번이 아닌 다른 숫자 입력 시 생기는 오류를 해결하였음.

 

에러 코드

Exception thrown: read access violation. player was nullptr.

 

→ 전직 시스템에서 1 ~ 4번이 아닌 다른 번호(예시: 5번)를 입력하면 switch문은 default: 로 가게됨.

→ defauit: 에는 객체를 생성하는 코드가 없음.

→ player 변수에 처음 입력된 nullptr 은 그대로 존재하게 됨.

→ player 가 nullptr 인 상태로 전투로 넘어가 에러가 생김.

 

해결 방법

default: 에 isSuccess = false; 를 추가

→ 잘못된 번호 입력 시 if (isSuccess) break; 조건에 맞지 않아 switch문 맨 위로 다시 올라가게 됨.


STEP 5 - Monster 클래스 + 1:1 전투 (클래스 설계, 전투 루프)

- 몬스터와 조우했을 때 자동 전투 되는 방식을 수정하였음.

 

- 몬스터와의 조우 시

플레이어와 몬스터의 스탯을 실시간으로 볼 수 있음

→ 매 턴이 시작될 때마다 플레이어와 몬스터의 HP 가 새로고침되어 출력됨.

 

- [공격], [방어], [도주] 행동을 추가하였음.

→ 자동 전투 방식에서 플레이어가 직접 행동을 결정하는 턴제 선택형 전투 시스템으로 바꿨음.

int battleChoice; → 플레이어가 입력할 숫자를 저장할 정수형 변수 생성( 1, 2, 3번을 눌러야됨)
if (!(cin >> battleChoice)) → 괄호 안의 결과가 실패하면(!) 실행


- 공격

→ 기본 STEP 5 와 동일하게 작동함.

 

- 방어

→ 플레이어는 공격 X, 몬스터만 공격, 플레이어는 방어하는 턴 동안만 + 10을 얻음.


- 도주

→ 50% 확률로 도주를 성공하게 설정했음.

실행할 때마다 랜덤을 하게 해주는 명령어

#include <cstdlib> 
→ 랜덤 숫자를 뽑는 기능 rand(), srand()을 사용하기 위함

#include <ctime> 
→ time(nullptr)를 사용하기 위함 
→ 컴퓨터의 현재 시간을 초 단위로 가져옴 
→ 1초에 1씩 계속 켜짐
→ 중복되지 않는 숫자가 들어옴

srand()
→ 컴퓨터 내부의 난수 테이블을 섞는 함수

srand(static_cast<unsigned int>(time(nullptr)));
→ 매초 바뀌는 컴퓨터 시간 데이터를 활용하여, 
프로그램을 실행할 때마다 랜덤 숫자가 다르게 나오도록 만든 난수 초기화 명령어

 


도주 성공 시 몬스터를 처치했을 때의 보상은 얻지 못하고 바로 메인메뉴로 나가게 됨.

bool isEscaped = false;
→ 아직 도망치지 않은 상태

else if (isEscaped == true)
→ 도망에 성공한다면