⚔️ RPG 전투 시스템
📋 프로젝트 개요
간단한 턴제 RPG 전투 시스템을 만들어봅시다! 플레이어와 몬스터가 서로 공격하며 싸우는 흥미진진한 게임입니다.
🎯 학습 목표
- 조건문 활용 (if, switch)
- 반복문 활용 (while, for)
- 함수 작성과 호출
- 함수 오버로딩
- 참조 전달
🚀 기본 기능
핵심 요구사항
1. 캐릭터 스탯 설정 🎮
- 플레이어 스탯: HP(100), ATK(15), DEF(5)
- 몬스터 스탯: HP(80), ATK(12), DEF(3)
- 플레이어 이름: 사용자 입력
2. 전투 메뉴 시스템 ⚔️
- 메뉴 옵션:
- 일반 공격 (100% 명중)
- 강한 공격 (70% 명중, 1.5배 데미지)
- 방어 (다음 턴 받는 데미지 50% 감소)
- 체력 회복 (30 HP 회복, 최대 3회)
3. 데미지 계산 시스템 💥
- 데미지 공식: 데미지 = 공격력 - (방어력 / 2)
- 최소 데미지: 1 보장
- 함수 오버로딩: 일반/강한 공격 구분
4. 전투 진행 🔄
- 턴제 전투: 플레이어 → 몬스터 순서
- HP 표시: 매 턴마다 현재 상태
- 종료 조건: 한쪽 HP가 0 이하
💡 구현 힌트
필요한 C++ 기능들
1. 랜덤 숫자 생성 (필수 힌트)
#include <cstdlib>
#include <ctime>
// main 함수 시작 부분에 추가
srand(time(0)); // 랜덤 시드 초기화
// 1~100 사이의 랜덤 숫자
int random = rand() % 100 + 1;
// 강한 공격 명중률 체크 (70%)
if(rand() % 100 < 70) {
// 공격 성공!
}
2. 스탯 변수 선언
// 플레이어 스탯
string playerName;
int playerHP = 100;
int playerATK = 15;
int playerDEF = 5;
int healCount = 3; // 회복 가능 횟수
// 몬스터 스탯
int monsterHP = 80;
int monsterATK = 12;
int monsterDEF = 3;
3. 메뉴 시스템 구현
cout << "\n[" << playerName << "의 턴]" << endl;
cout << "1. 일반 공격" << endl;
cout << "2. 강한 공격 (70% 명중)" << endl;
cout << "3. 방어" << endl;
cout << "4. 회복 (남은 횟수: " << healCount << ")" << endl;
cout << "선택: ";
int choice;
cin >> choice;
switch(choice) {
case 1:
// 일반 공격
break;
case 2:
// 강한 공격
break;
// ...
}
4. 데미지 계산 함수
// 일반 공격 데미지 계산
int calculateDamage(int atk, int def) {
int damage = atk - (def / 2);
if(damage < 1) damage = 1;
return damage;
}
// 강한 공격 데미지 계산 (오버로딩)
int calculateDamage(int atk, int def, double multiplier) {
int damage = (atk * multiplier) - (def / 2);
if(damage < 1) damage = 1;
return damage;
}
5. HP 막대 표시
void displayHPBar(int currentHP, int maxHP) {
int barLength = 20;
int filledLength = (currentHP * barLength) / maxHP;
cout << "[";
for(int i = 0; i < barLength; i++) {
if(i < filledLength) {
cout << "■";
} else {
cout << "□";
}
}
cout << "] " << currentHP << "/" << maxHP << " HP" << endl;
}
6. 전투 루프 구조
bool isDefending = false; // 방어 상태
while(playerHP > 0 && monsterHP > 0) {
// 상태 표시
cout << "\n--- 현재 상태 ---" << endl;
cout << playerName << ": ";
displayHPBar(playerHP, 100);
cout << "몬스터: ";
displayHPBar(monsterHP, 80);
// 플레이어 턴
// ...
// 몬스터 턴
// ...
}
// 전투 결과
if(playerHP > 0) {
cout << "승리!" << endl;
} else {
cout << "패배..." << endl;
}
참조로 HP 수정하기
void takeDamage(int& hp, int damage) {
hp -= damage;
if(hp < 0) hp = 0;
}
void heal(int& hp, int amount, int maxHP) {
hp += amount;
if(hp > maxHP) hp = maxHP;
}
🎯 도전 과제
- 크리티컬 시스템: 20% 확률로 2배 데미지
- 스킬 시스템: MP를 사용하는 특수 공격 추가
- 다중 몬스터: 3마리 연속 전투
- 레벨 시스템: 승리 시 경험치와 레벨업
- 아이템 시스템: 포션 등 아이템 사용
📝 완성 체크리스트
⚔️ RPG 전투 시스템 체크리스트
🎉 완성 후 해볼 것
완성된 전투 시스템을 친구들과 함께 플레이해보세요! 밸런스를 조정하거나 새로운 몬스터를 추가해서 더욱 재미있는 게임으로 발전시켜보세요.
Last updated on