보스 몬스터 구조 설계
기존 구조
기존에는 Monster 클래스 하나로 모든 몬스터를 처리해 왔다.
하지만 보스는 일반 몬스터와 다르게
- 페이즈 변화
- 특수 공격
- 패턴 행동
등이 필요했기에 별도 구조로 설계했다.
적용한 구조
Monster
↑
BossMonster
↑
BossDragon
Monster
- 기본 스탯 ( Hp, Attack 등 관리)
BossMonster
- 보스 공통 기능 담당
- 페이즈 관리 ( isPhaseTwo_ )
- 특수 공격 인터페이스 ( SpecialAttack() )
BossDragon
- 실제 보스 구현
- 스킬 및 패턴 정의
왜 이렇게 했는가...?
BossDrangon 을 바로 만들게 되면
- 보스 객체 간 코드 중복
- 유지보수 난이도 상승
- 확장이 힘듬
BossMonster 를 중간에 두면서 보스 시스템을 재사용 가능하게 만들었다.
보스 패턴 설계
SpecialAttack
void BossDragon::SpecialAttack()
{
// int SpecialDamage = attack_ * 2;
if (isPhaseTwo_)
{
// SpecialDamage = attack_ * 3;
HellFireBreath();
// 2페이지 전투 데미지 배율 적용 예정
}
else
{
FireBreath();
// 기본 특수 공격 데미지 처리 예정
}
}
- 보스의 "궁극기" or "발악기"
- 페이즈에 따라 다른 특수기를 사용하게 설계
UsePattern
void BossDragon::UsePattern()
{
if (!isPhaseTwo_)
{
int pattern = rand() % 3;
switch (pattern)
{
case 0:
TailSwing();
break;
case 1:
DownwardStrike();
break;
case 2:
Roar();
break;
}
}
else
{
int pattern = rand() % 2;
switch (pattern)
{
case 0:
HellFireTailSwing();
break;
case 1:
Roar();
break;
}
}
}
- 보스의 일반 행동 설계
- 랜덤 패턴 기반 설계
- 페이즈에 따른 일반 행동 변화
구조를 분리한 이유!
- SpecialAttack() = 강력한 특수 공격기로 보스의 필살기다! 라는 느낌을 강조
- UsePattern() = 보스의 기본기로 특수한 객체라 함은 다양한 패턴을 기본적으로 구사할 수 있어야 한다 는 느낌
구조 분리를 통해 보스 행동을 명확하게 나눴다.
스킬 구조 설계
기본 공격
- TailSwing()
- DownwardStrike()
외면에 보이는 부위를 사용하여 공격하게끔 하여 기본 타격이다라는 느낌을 강조
기본 스킬
- FireBreath()
- Roar()
외면에 보이지 않는 특별한 무언가로 강력한 공격이구나 라는 느낌
2 페이즈 스킬
- HellFireBreath()
- HellFireTailSwing()
페이즈 변화에 맞춰 보스가 많이 위협적이게 바뀌었구나를 보여줌
마무리
처음 보스를 설계하자 했을 땐 몬스터랑 달라봐야 스탯 부분정도만 조정해 주면 되겠다 라고 생각했으나,
구현을 하다 보니 이런 생각이 들었다.
보스라면 자신만의 기본기와 특수기를 가짐으로써 특별한 존재를 플레이어에게 각인시켜야겠구나!
해서 기존의 설계에서 확장된 부분이 많아졌다.
실제 설계를 하면서도 이렇게 하면 다른 보스도 쉽게 할 수 있겠구나를 느꼈다.
'학습일지 > C와 C++' 카테고리의 다른 글
| C++ 콘솔 RPG 프로젝트 Main 흐름 정리 (0) | 2026.03.31 |
|---|---|
| C++ 상점 시스템(Store) 설계 및 구현 (0) | 2026.03.30 |
| C++ 첫 번째 협업 체험 팀 프로젝트 (0) | 2026.03.26 |
| C++ 연금술 공방 관리 시스템 구현 과제 (0) | 2026.03.24 |
| C++ 콘솔 RPG 만들기 (0) | 2026.03.19 |