구현

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;  // 프로그램 종료
}

설명:

  1. GameModule 인터페이스:
    • 각 게임 모듈은 GameModule 인터페이스를 구현해야 하며, 그 안에 run() 함수를 정의해야 합니다. 이 함수는 해당 모듈이 처리할 명령어를 수행합니다.
  2. GameCore 클래스:
    • GameCore는 게임의 중심 역할을 합니다. registerModule() 함수로 명령어 접두사와 모듈을 연결하고, handleCommand() 함수로 사용자의 명령어를 처리합니다.
  3. 모듈 등록 및 명령어 처리:
    • GameCore 클래스에 모듈을 등록한 후, 사용자가 입력한 명령어가 해당 모듈에 맞는지 확인하고, 그에 해당하는 모듈의 run() 함수를 실행합니다.
    • 예시로 Fishing 명령어를 등록하고, "Fishing start" 명령어를 입력받아 "Fishing started!"를 출력합니다.

핵심 포인트:

  • GameCore는 다양한 게임 모듈을 관리하고, 해당 명령어에 맞는 모듈을 실행합니다.
  • 모듈은 GameModule 인터페이스를 통해 run() 메서드를 구현하고, 게임의 다양한 기능을 처리합니다.
  • 이 구조를 바탕으로 모듈을 확장하여 다양한 게임 로직을 추가할 수 있습니다.

이 포스팅을 그대로 복사하여 블로그에 올리면, 코어 뼈대를 만들기 단계가 잘 구현된 예시로 올릴 수 있습니다. 이 후에는 2단계인 모듈 시스템 구축으로 넘어가시면 됩니다!

준비되셨다면, 다음 단계로 진행할 준비가 되셨습니다!