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 및 상호작용
- 역할 기반으로 시스템을 분리
'학습일지 > C와 C++' 카테고리의 다른 글
| C++ 객체 지향과 메모리 관리 (0) | 2026.04.03 |
|---|---|
| vector 중복 제거 구현 및 개선 과정 (0) | 2026.04.02 |
| C++ 콘솔 RPG 프로젝트 Main 흐름 정리 (0) | 2026.03.31 |
| C++ 상점 시스템(Store) 설계 및 구현 (0) | 2026.03.30 |
| C++ 보스 몬스터 설계와 패턴 (0) | 2026.03.27 |