구현
AI와 협업 프로젝트: 구현 1/6 코어
cs newbie
2025. 5. 4. 21:41
알겠습니다! 이제 주석을 꼼꼼히 달아서 복사하기 좋은 형태로 준비했습니다. 아래 코드를 그대로 블로그에 복사하여 사용할 수 있습니다.
🔧 1단계: 코어 뼈대 만들기 - 기본 구조
목표: GameCore 클래스를 생성하고, 모듈을 등록할 수 있는 기본 구조와 명령어 처리 함수를 구현합니다.
#include <iostream>
#include <unordered_map>
#include <string>
// 1. GameModule 인터페이스 정의
// 각 게임 모듈은 이 인터페이스를 구현해야 합니다.
// run 함수는 모듈이 수행할 작업을 정의합니다.
// **확장 가능**: 새로운 게임 모듈(예: Battle, Quest 등)을 만들 때 GameModule을 상속받아 구현합니다.
class GameModule {
public:
virtual std::string run(const std::string& command) = 0; // 명령어를 실행하는 함수
};
// 2. GameCore 클래스 정의
// GameCore 클래스는 게임의 중심 로직을 담당합니다.
// - 명령어를 파싱하고, 해당 명령어에 맞는 모듈을 실행합니다.
// **확장 가능**: GameCore는 새로운 모듈을 추가할 때마다 동적으로 확장 가능합니다.
class GameCore {
private:
std::unordered_map<std::string, GameModule*> modules; // 모듈을 저장할 맵 (명령어 접두사 -> 모듈)
public:
// 3. 모듈을 등록하는 함수
// GameCore에 모듈을 등록하는 함수입니다.
// 예를 들어 "Fishing"이라는 명령어에 대해 FishingModule을 실행하도록 설정합니다.
void registerModule(const std::string& commandPrefix, GameModule* module) {
modules[commandPrefix] = module; // 명령어 접두사와 모듈을 맵에 저장
}
// 4. 명령어 처리 함수
// 사용자가 입력한 명령어를 처리합니다.
// 명령어를 파싱하여 해당 명령어의 모듈을 찾아 실행합니다.
std::string handleCommand(const std::string& command) {
std::string prefix = command.substr(0, command.find(' ')); // 명령어 앞부분(접두사) 추출
// 명령어 접두사에 해당하는 모듈이 있으면 실행
if (modules.find(prefix) != modules.end()) {
return modules[prefix]->run(command); // 해당 모듈을 실행하고 결과 반환
}
// 명령어가 없으면 오류 메시지 반환
return "Unknown command."; // 모듈이 없는 명령어는 "Unknown command" 반환
}
};
// 5. 예시 모듈: FishingModule
// Fishing과 관련된 명령어를 처리하는 모듈입니다.
// **확장 가능**: 이와 유사한 방식으로 BattleModule, QuestModule 등을 추가할 수 있습니다.
class FishingModule : public GameModule {
public:
// 명령어 실행 함수
// "Fishing start"와 같은 명령어를 받으면 "Fishing started!"를 반환합니다.
std::string run(const std::string& command) override {
return "Fishing started!"; // 낚시 시작 메시지 반환
}
};
int main() {
// 6. GameCore 객체 생성
GameCore gameCore;
// 7. 모듈 등록
// "Fishing"이라는 명령어를 처리할 모듈로 FishingModule을 등록합니다.
gameCore.registerModule("Fishing", new FishingModule());
// 8. 명령어 실행
// 사용자가 "Fishing start" 명령어를 입력하면, "Fishing started!"라는 결과가 반환됩니다.
std::string result = gameCore.handleCommand("Fishing start");
// 결과 출력
std::cout << result << std::endl; // "Fishing started!" 출력
return 0; // 프로그램 종료
}
설명:
- GameModule 인터페이스:
- 각 게임 모듈은 GameModule 인터페이스를 구현해야 하며, 그 안에 run() 함수를 정의해야 합니다. 이 함수는 해당 모듈이 처리할 명령어를 수행합니다.
- GameCore 클래스:
- GameCore는 게임의 중심 역할을 합니다. registerModule() 함수로 명령어 접두사와 모듈을 연결하고, handleCommand() 함수로 사용자의 명령어를 처리합니다.
- 모듈 등록 및 명령어 처리:
- GameCore 클래스에 모듈을 등록한 후, 사용자가 입력한 명령어가 해당 모듈에 맞는지 확인하고, 그에 해당하는 모듈의 run() 함수를 실행합니다.
- 예시로 Fishing 명령어를 등록하고, "Fishing start" 명령어를 입력받아 "Fishing started!"를 출력합니다.
핵심 포인트:
- GameCore는 다양한 게임 모듈을 관리하고, 해당 명령어에 맞는 모듈을 실행합니다.
- 모듈은 GameModule 인터페이스를 통해 run() 메서드를 구현하고, 게임의 다양한 기능을 처리합니다.
- 이 구조를 바탕으로 모듈을 확장하여 다양한 게임 로직을 추가할 수 있습니다.
이 포스팅을 그대로 복사하여 블로그에 올리면, 코어 뼈대를 만들기 단계가 잘 구현된 예시로 올릴 수 있습니다. 이 후에는 2단계인 모듈 시스템 구축으로 넘어가시면 됩니다!
준비되셨다면, 다음 단계로 진행할 준비가 되셨습니다!