天天看點

第8周【項目4-遊戲中的角色類增強版】



#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include <string>
using namespace std;
const int N=10; //每個角色最多擁有的武器
const int NOWEAPON=-1;  //表示手中無武器

class Point     //Point類聲明
{
public: //外部接口
    Point(int x=0, int y=0);
    int getX();
    int getY();
    double distance(const Point &p);  //傳回與另外一點p之間的距離
    void moveTo(int x, int y); //移到另外一點
    void move(int dx, int dy); //從目前位置移動
private:
    int x, y;  //座标
};

class Weapon
{
public:
    Weapon(){};
    Weapon(string wnam, int f, double k);
    Weapon(const Weapon&);
    string getWname();
    int getForce();         //傳回殺傷力
    double getKillRange();  //傳回殺傷距離
private:
    string wname;   //名稱
    int force;       //殺傷力
    double killRange;   //殺傷距離
};

class Role
{
public:
    Role(string nam, int b, Point l, Weapon w[], int n); //構造函數
    ~Role(); //析構函數
    void eat(int d); //吃東西,漲d血(死了後吃上東西可以複活)
    void attack(Role &r); //攻擊别人,自己漲血,同時對方被攻擊失血。血量取決于目前用的武器
    void beAttack(int f); //被别人攻擊,參數f是承受的攻擊力
    double distance(Role &r); //傳回與另一角色的距離
    bool isAlived(); //是否活着
    void moveTo(int x, int y); //移到另外一點
    void move(int dx, int dy); //從目前位置移動
    void changeWeapon(int wno); //換手中的武器
    void show(); //顯示
private:
    string name;  //角色名稱
    int blood;    //目前血量
    bool life;    //是否活着
    Point location;  //位置
    Weapon weapons[N];  //武器
    int weaponNum;      //武器數目
    int holdWeapon;     //現在手持哪一件武器(空手為NOWEAPON,初始時空手)
};

#endif // GAME_H_INCLUDED