TIL: C++ TextRPG 개발 22일차

박춘팔·2026년 4월 29일

언리얼 TIL

목록 보기
21/26

누적 학습 시간 : 200시간 34분

📅 2026-04-29

Directory 구조

C++에서 어떤 구조가 좋을지는 아직 학습을 못해서 일단 생각대로 만들어보려고 한다.
main() 함수는 TextRPG.cpp 안에 있다.

main() 함수는 오직 GameStart() 함수만 담고있다.

GameState 및 선택지 분기처리

여러 방법이 떠올랐는데 가장 기본적으로는 cin으로 입력받고 switch/case로 분기하는 것이었다.

근데 뭔가 최선은 아닌 듯 해서 방법을 찾아보니 Function Map이라는 자료구조가 있다는 걸 알게됐다.

Function Map

입력 값(key)에 따라 실행할 함수를 연결 해놓은 자료구조

switch (input)
{
case '1': Attack(); break;
case '2': Defend(); break;
}

위와같은 switch case를 데이터 구조로 변경한 것이다.

사용법

#include <map>
#include <functional>

// 선언
std::map<char, std::function<void()>> funcMap;

실사용 예제

#include <iostream>
#include <functional>
#include <map>

void Attack() { std::cout << "Attack"; } 
void Defend() { std::coud << "Defend"; }

void main()
{
	std::map<char, std::function<void()>> funcMap;
    
    funcMap['q'] = Attack;
    funcMap['w'] = Defend;
    
    char input;
    
    std::cin >> input;
    
    funcMap[input]();
}

결과적으로 함수를 값처럼 사용할 수 있다는 점에서 Delegate와 비슷하지만 이벤트 시스템은 직접 구현해야된다거나 하는 점에서 Delegate는 상위 개념으로 볼 수 있다.

그리고 코드를 딱 보면 알겠지만 switch/case 쓰는 것 보다 코드가 클린해진다.

그리고 이후 입력>출력 데이터 추가에도 매우 용이하다.

가상함수

Stat SetBaseStat() const override

override
부모클래스의 가상함수를 재정의 하겠다는 뜻

virtual Stat SetBaseStat() const = 0;

= 0 하는 이유 > 이유없음 그냥 C++ 문법 얘는 순수가상함수다 라는걸 나타냄

내일 GameState > GetPlayerCharacter부터 시작

profile
이것 저것 다해보는 삶

0개의 댓글