내일배움캠프-언리얼

[내일배움캠프 - 언리얼] DAY 12 - 간단한 직업(클래스) 만들기 - 1

이시보 2025. 12. 12. 21:04

전직 시스템과 전투 시스템

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;
}

 

여기에 몬스터와의 상호작용도 다음에 추가한다.