C++アイテムリファレンス解答:ゲーム中のキャラクタークラス


【アイテム-ゲーム中のキャラクター類】
(1)次のように設計されたゲームのキャラクタークラスに基づいて、必要なメンバー関数を完全に補充し、キャラクターが一定の規則的に行動したり状態を変えたりすることができます.次のコードには最も基本的な要求が含まれており、あなたの設計に基づいて拡張することができます.
class Role {
public:
    ……
private:
    string name;
    int blood;
    bool life;
};
int main( )
{
    Role mary;
    mary.setRole("Mary", 4);
    mary.show();
    mary.attack();
    mary.eat(2);
    mary.beAttack();
    mary.beAttack();
    mary.show();
    return 0;
}

[参考解答]
#include <iostream>
using namespace std;
class Role
{
public:
    void eat(int d); //   , d 
    void attack(); //    , 1 
    void beAttack(); //   , 1 ,  0  
    bool isAlived(); //    
    void setRole(string nam, int b); //  
    void show(); //  
private:
    string name;
    int blood;
    bool life;
};
void Role::eat(int d) //   , d 
{
    if(isAlived())
        blood+=d;
}
void Role::attack() //    , 1 
{
    if(isAlived())
        blood++;
}
void Role::beAttack() //   , 1 ,  0  
{
    if(isAlived())
        blood--;
    if(blood==0)
        life=false;
}
bool Role::isAlived() //    
{
    return life;
}
void Role::setRole(string nam, int b) //  
{
    name=nam;
    blood=b;
    if(blood>0)
        life=true;
    else
        life=false;
}
void Role::show() //  
{
    cout<<name<<" has "<<blood<<" blood, it is ";
    if(isAlived())
        cout<<"alived.";
    else
        cout<<"dead.";
    cout<<endl;
}
int main( )
{
    Role mary;
    mary.setRole("Mary", 4);
    mary.show();
    mary.attack();
    mary.eat(2);
    mary.beAttack();
    mary.beAttack();
    mary.show();
    return 0;
}

(2)キャラクターオブジェクトが作成時に初期化されるように設計構造関数を作成する.設計構造関数は、キャラクターオブジェクトが取り消された場合、「XXX(名称)江湖を脱退する…」と提示する.以下のコードでテストを行い、実行結果は右図を参照する.
int main( )
{
    Role mary("Mary", 4);
    Role jack("Jack", 0);
    mary.show();
    jack.show();
    return 0;
}

[参考解答]
#include <iostream>
using namespace std;
class Role
{
public:
    Role(string nam, int b); //    
    ~Role(); //    
    void eat(int d); //   , d 
    void attack(); //    , 1 
    void beAttack(); //   , 1 ,  0  
    bool isAlived(); //    

    void show(); //  
private:
    string name;
    int blood;
    bool life;
};
Role::Role(string nam, int b)
{
    name=nam;
    blood=b;
    if(blood>0)
        life=true;
    else
        life=false;
}
Role::~Role()
{
    cout<<name<<"    ..."<<endl;
}
void Role::eat(int d) //   , d 
{
    if(isAlived())
        blood+=d;
}
void Role::attack() //    , 1 
{
    if(isAlived())
        blood++;
}
void Role::beAttack() //   , 1 ,  0  
{
    if(isAlived())
        blood--;
    if(blood==0)
        life=false;
}
bool Role::isAlived() //    
{
    return life;
}

void Role::show() //  
{
    cout<<name<<" has "<<blood<<" blood, it is ";
    if(isAlived())
        cout<<"alived.";
    else
        cout<<"dead.";
    cout<<endl;
}
int main( )
{
    Role mary("Mary", 4);
    Role jack("Jack", 0);
    mary.show();
    jack.show();
    return 0;
}