Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
C++ 프로젝트level-2RPG 전투 시스템

⚔️ RPG 전투 시스템

📋 프로젝트 개요

간단한 턴제 RPG 전투 시스템을 만들어봅시다! 플레이어와 몬스터가 서로 공격하며 싸우는 흥미진진한 게임입니다.

🎯 학습 목표

  • 조건문 활용 (if, switch)
  • 반복문 활용 (while, for)
  • 함수 작성과 호출
  • 함수 오버로딩
  • 참조 전달

🚀 기본 기능

핵심 요구사항

1. 캐릭터 스탯 설정 🎮

  • 플레이어 스탯: HP(100), ATK(15), DEF(5)
  • 몬스터 스탯: HP(80), ATK(12), DEF(3)
  • 플레이어 이름: 사용자 입력

2. 전투 메뉴 시스템 ⚔️

  • 메뉴 옵션:
    1. 일반 공격 (100% 명중)
    2. 강한 공격 (70% 명중, 1.5배 데미지)
    3. 방어 (다음 턴 받는 데미지 50% 감소)
    4. 체력 회복 (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; }

🎯 도전 과제

  1. 크리티컬 시스템: 20% 확률로 2배 데미지
  2. 스킬 시스템: MP를 사용하는 특수 공격 추가
  3. 다중 몬스터: 3마리 연속 전투
  4. 레벨 시스템: 승리 시 경험치와 레벨업
  5. 아이템 시스템: 포션 등 아이템 사용

📝 완성 체크리스트

⚔️ RPG 전투 시스템 체크리스트

🎉 완성 후 해볼 것

완성된 전투 시스템을 친구들과 함께 플레이해보세요! 밸런스를 조정하거나 새로운 몬스터를 추가해서 더욱 재미있는 게임으로 발전시켜보세요.

Last updated on