전직 시스템과 전투 시스템

Player.h
#pragma once
#include <string>
using namespace std;
class Player {
public:
Player(string nickname); // 생성자
virtual void attack() = 0; // 순수 가상 함수
void printPlayerStatus(); // 스탯 출력
// getter 함수
string getJobName();
string getNickname();
int getLevel();
int getHP();
int getMP();
int getPower();
int getDefence();
int getAccuracy();
int getSpeed();
// setter 함수
void setNickname(string nickname);
bool setHP(int HP);
bool setMP(int MP);
void setPower(int power);
void setDefence(int defence);
void setAccuracy(int accuracy);
void setSpeed(int speed);
protected:
string job_name;
string nickname;
int level;
int HP;
int MP;
int power;
int defence;
int accuracy;
int speed;
};
Player.cpp
#include "Player.h"
#include <iostream>
Player::Player(string nickname) {
level = 1;
setNickname(nickname);
setHP(10);
setMP(10);
setPower(10);
setDefence(10);
setAccuracy(10);
setSpeed(10);
}
void Player::printPlayerStatus() {
cout << "------------------------------------" << endl;
cout << "* 현재 능력치" << endl;
cout << "닉네임: " << nickname << endl;
cout << "Lv. " << level << endl;
cout << "HP: " << HP << endl;
cout << "MP: " << MP << endl;
cout << "공격력: " << power << endl;
cout << "방어력: " << defence << endl;
cout << "정확도: " << accuracy << endl;
cout << "속도: " << speed << endl;
cout << "------------------------------------" << endl;
}
string Player::getJobName() { return job_name; }
string Player::getNickname() { return nickname; }
int Player::getLevel() { return level; }
int Player::getHP() { return HP; }
int Player::getMP() { return MP; }
int Player::getPower() { return power; }
int Player::getDefence() { return defence; }
int Player::getAccuracy() { return accuracy; }
int Player::getSpeed() { return speed; }
void Player::setNickname(string nickname) { Player::nickname = nickname; }
bool Player::setHP(int HP) { Player::HP = HP; return true; }
bool Player::setMP(int MP) { Player::MP = MP; return true; }
void Player::setPower(int power) { Player::power = power; }
void Player::setDefence(int defence) { Player::defence = defence; }
void Player::setAccuracy(int accuracy) { Player::accuracy = accuracy; }
void Player::setSpeed(int speed) { Player::speed = speed; }
Warrior.h
#pragma once
#include "Player.h"
class Warrior : public Player { // Player .클래스 상속
public:
Warrior(string nickname); // 전사 생성자
void attack() override; // 공격 함수 상속
};
Warrior.cpp
#include "Warrior.h"
#include <iostream>
Warrior::Warrior(string nickname) : Player(nickname){ // 기본 클래스 생성자 호출
job_name = "전사";
setHP(50);
setMP(10);
setPower(30);
setDefence(30);
setAccuracy(20);
setSpeed(10);
cout << "* 전사로 전직하였습니다." << endl;
}
void Warrior::attack() {
cout << "* 대검을 휘두릅니다." << endl;
}
마법사, 궁수, 도적도 전사와 같은 방식으로 만든다.
Main.cpp
#include <iostream>
#include "player.h"
#include "warrior.h"
#include "magician.h"
#include "thief.h"
#include "archer.h"
using namespace std;
int main() {
string jobs[] = { "전사", "마법사", "도적", "궁수" };
int job_choice = 0;
string nickname;
Player* player = nullptr;
cout << "* 닉네임을 입력해주세요: ";
cin >> nickname;
cout << "<전직 시스템>" << endl;
cout << nickname << "님, 환영합니다!" << endl;
cout << "* 원하시는 직업을 선택해주세요." << endl;
for (int i = 0; i < 4; i++) {
cout << (i + 1) << ". " << jobs[i] << endl;
}
cout << "선택: ";
cin >> job_choice;
switch (job_choice) {
case 1:
player = new Warrior(nickname);
break;
case 2:
player = new Magician(nickname);
break;
case 3:
player = new Thief(nickname);
break;
case 4:
player = new Archer(nickname);
break;
default:
cout << "잘못된 입력입니다." << endl;
return 1;
}
player->attack();
player->printPlayerStatus();
delete player;
return 0;
}

여기에 몬스터와의 상호작용도 다음에 추가한다.
'내일배움캠프-언리얼' 카테고리의 다른 글
| [내일배움캠프 - 언리얼] DAY 14 - 메모리 관리하기 (0) | 2025.12.16 |
|---|---|
| [내일배움캠프 - 언리얼] DAY 13 - 간단한 직업(클래스) 만들기 - 2 (0) | 2025.12.15 |
| [내일배움캠프 - 언리얼] DAY 11 - 클래스로 자동차 만들기 (0) | 2025.12.11 |
| [내일배움캠프 - 언리얼] DAY 10 - 포인터 실습 (0) | 2025.12.10 |
| [내일배움캠프 - 언리얼] DAY 9 - 포맷 장난치기 (0) | 2025.12.09 |