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

main() 함수는 오직 GameStart() 함수만 담고있다.
여러 방법이 떠올랐는데 가장 기본적으로는 cin으로 입력받고 switch/case로 분기하는 것이었다.
근데 뭔가 최선은 아닌 듯 해서 방법을 찾아보니 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부터 시작