본문 바로가기

개발일지

[개발일지] '용사가 되자' part 1

기본적으로 배운것들을 토대로 살을 붙여나가는 형식으로 진행중입니다 


[18.01.06]


#0 객체지향적으로 연습중

#1  용사의 이름 설정.

#2  몬스터를 잡으면 경험치와 골드를 얻음

#3  레벨업기능 추가

#4  메뉴 구현

#5  턴제


int main() {

    string name;

    int select;

    


//    Helmet* helmet = new Helmet();

//    Sword* sword = new Sword();


    std::cout << "[ 용사가 되자 ]" << std::endl;

    std::cout << "용사의 이름을 설정하세요" << std::endl;

    std::cin >> name;

    Hero* h = new Hero(name);

    h->showStat();

    

    select = 0;

    while(select != 5){

        select = selectMenu();

        switch(select){

            case 1: { // 전투하기

                Goblin *goblin = new Goblin();

                Goblin *tempG = goblin;

                Hero *tempH = h;

                battle(tempH, tempG);

                break;

            }

            case 2: { // 능력치보기

                h->showStat();

                break;

            }

            case 3: { //상점가기

                std::cout << " 상점가기 " << std::endl;

                break;

            }

            case 4:{ //인벤토리가기

                std::cout << " 인벤토리 " << std::endl;

                break;

            }

            case 5: { //나가기

                std::cout << "[ 용사가 잠들었습니다 ]" << std::endl;

                break;

            }

        }

    }


- class Hero();

-showStat() // 용사의 능력치를 보여주는 함수

- class Goblin();

- class Helmet();

- class Sword();

- int main()

- battle() // 몬스터와 배틀하는 임시적인 공간, 게임에서 이기면 골드와 경험치 획득


#6 기본적으로 클래스 내부 함수들은 private 


class Hero{

public:

    Hero(){

        name = "김용사";

        MAXHP = 100;

        MAXMP = 150;

        MAXEXP = 100;

        hp = 100;

        mp = 150;

        armor = 10;

        attack = 20;

        exp = 0;

        level = 1;

        gold = 0;

        helmet = nullptr;

        sword = nullptr;

    }

    Hero(string userName){

        name = userName;

        MAXHP = 100;

        MAXMP = 150;

        MAXEXP = 100;

        hp = 100;

        mp = 150;

        armor = 10;

        attack = 20;

        exp = 0;

        level = 1;

        gold = 0;

        helmet = nullptr;

        sword = nullptr;

    }

    ~Hero(){

        std::cout << "~remove HeroClass" << std::endl;

    }

public:

    void showStat(){

        std::cout << "=============================" << std::endl;

        std::cout << "Name : " << name << std::endl;

        std::cout << "Level : " << level << std::endl;

        std::cout << "HP : " << hp << " / " << MAXHP << std::endl;

        std::cout << "MP : " << mp << " / " << MAXMP << std::endl;

        std::cout << "Armor : " << armor <<" (+ "<< (helmet == nullptr ? 0 : helmet->getArmor()) << ")" << std::endl;

        std::cout << "Attack : " << attack <<" (+ " << (sword == nullptr ? 0 : sword->getAttack()) << ")" << std::endl;

        std::cout << "Exp : " << exp << " / " << MAXEXP << std::endl;

        std::cout << "Gold : " << gold << std::endl;

        std::cout << "=============================" << std::endl;

    }

    string getName(){

        return name;

    }

    void getHelmet(Helmet *temp){

        helmet = temp;

        std::cout << "[헬멧 장착완료!]" << std::endl;

    }

    void getSword(Sword *temp){

        sword = temp;

        std::cout << "[소드 장착완료!]" << std::endl;

    }

    int getHp(){

        return hp;

    }

    int getMAXHP(){

        return MAXHP;

    }

    int getMp(){

        return mp;

    }

    int getArmor(){

        return armor;

    }

    int getAttack(){

        return attack;

    }

    int getMoney(){

        return gold;

    }

    

    void setHp(int tempHp){

        hp = tempHp;

    }

    void setMp(int tempMp){

        mp = tempMp;

    }

    void setMoney(int tempMoney){

        if(gold + tempMoney < 0){

            gold = 0;

        }

        else

            gold += tempMoney;

    }

    void setExp(int tempExp){

        if(exp + tempExp < 100){

            exp += tempExp;

        }

        if(exp + tempExp >= 100){

            exp = exp + tempExp;

            exp -= 100;

            levelUp();

        }

        if(exp + tempExp < 0){

            exp = exp + tempExp;

            exp += 100;

            levelDown();

        }

    }

    void levelUp(){

        level++;

    }

    void levelDown(){

        level--;

    }

    

private:

    string name;

    int MAXHP;

    int MAXMP;

    int MAXEXP;

    int hp;

    int mp;

    int armor;

    int attack;

    int exp;

    int level;

    int gold;

    Helmet *helmet;

    Sword *sword;

};


class를 작성시에 멤버변수들은 맨 아래에 적는것이 좋다고한다.

왜냐하면 다른 사람이 class를 볼때 변수들을 보고 무슨일을 하는 클래스인지 보는것이 아니라

함수를 통해 보기 때문이다.



part2에 추가할 내용


- 상점구현

- 물약섭취

- 헬멧, 검 장착