학습일지/C와 C++

C++ 팀 프로젝트 TextConsoleRPG

Tsukino Ren 2026. 4. 1. 20:42

Main


게임 흐름 제어

int main()
{
    std::srand(static_cast<unsigned int>(std::time(nullptr)));

    GameLog log;
    Player player("Player");
    Inventory inventory;
    Store store;

    int startChoice = log.ShowMainMenu();
    if (startChoice != 1)
    {
        std::cout << "게임을 종료합니다.\n";
        return 0;
    }

    log.SetupCharacter(&player);

    while (true)
    {
        if (!player.IsAlive())
        {
            log.DrawGameOver();
            break;
        }

        log.ClearScreen();
        int choice = log.ShowMenu();

        // 선택에 따른 분기 처리함
    }
}
  • 게임의 전체 흐름을 제어하는 핵심 루프 시스템
  • UI(GameLog)를 통해 입력을 받고 각 시스템으로 분기 처리

설계 포인트

  • Main은 흐름 제어만 담당
  • 실제 로직은 각 클래스에 위임
  • 무한 루프 기반으로 게임 상태 유지

Monster


class Monster
{
protected:
    std::string name_;
    int hp_;
    int attack_;
    int defense_;

public:
    Monster(const std::string& name, int level);

    void TakeDamage(int damage);
    bool IsDead() const;
};
  • 모든 몬스터의 공통 속성과 기능을 정의
  • 상속을 고려한 구조 (protected)

스탯 초기화

Monster::Monster(const std::string& name, int level)
{
    hp_ = level * (rand() % 11 + 20);
    attack_ = level * (rand() % 6 + 5);
    defense_ = level * 3;
}
  • 레벨 기반 랜덤 스탯 생성
  • 동일 몬스터라도 개체마다 차이를 가지도록 설계

피해 처리

void Monster::TakeDamage(int damage)
{
    int finalDamage = damage - defense_;

    if (finalDamage < 1)
        finalDamage = 1;

    hp_ -= finalDamage;

    if (hp_ < 0)
        hp_ = 0;
}
  • 최소 데미지 보장 / 0으로 처리 가능
  • 체력 음수 방지 처리

BossMonster


보스 몬스터 확장

class BossMonster : public Monster
{
protected:
    bool isPhaseTwo_;

public:
    BossMonster(const std::string& name, int level);

    virtual void SpecialAttack();
    void UsePattern();
};
  • 기본 Monster를 상속받고 보스 전용 기능 추가
  • 페이즈 기반 전투 구조 설계

패턴 기반 공격

class BossMonster : public Monster
{
protected:
    bool isPhaseTwo_;

public:
    BossMonster(const std::string& name, int level);

    virtual void SpecialAttack();
    void UsePattern();
};
  • 랜덤 패턴 선택
  • 전투 다양성 확보

페이즈 전환

void BossMonster::SpecialAttack()
{
    if (isPhaseTwo_)
    {
        HellFireBreath();
    }
    else
    {
        FireBreath();
    }
}
  • 상태에 따라 공격 방식 변경
  • 보스 전투의 단계적 난이도 구성

Store


상점 구조

class Store
{
public:
    void OpenStore(Player& player, Inventory& inventory);
};
  • 플에이어와 인벤토리를 기반으로 동작
  • UI 상호작용 중심 역할

구매 처리

void Store::OpenStore(Player& player, Inventory& inventory)
{
    int choice;
    std::cin >> choice;

    // 선택에 따라 아이템 구매 처리
}
  • 사용자 입력 기반으로 구매 진행
  • 실제 아이템 관리는 Inventory에서 수행

설계 포인트

  • Store는 일부 UI 및 상호작용만 담당
  • Inventory는 데이터 관리 전담
    • 역할 분리를 통해 구조 충돌을 방지

정리

  • Main → 흐름제어
  • Monster → 기본 몬스터 생성자
  • BossMonster → 확장된 전투 스타일
  • Store → 내부 UI 및 상호작용
    • 역할 기반으로 시스템을 분리