您的位置:首页 > 编程语言

编程小练习

2016-04-28 08:50 281 查看
* 问题描述: 杀伤距离的限制

 */

#include<iostream>

#include<cstring>

#include<cmath>

using namespace std;

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

    int y;

};

class Weapon

{

public:

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

    ~Role();

    void eat(int d);

    void attack(Role &r);

    void beAttack(int f);

    double distance(Role &r);

    bool isAlived();

    void moveTo(int x,int y);

    void move(int dx,int dy);

    void show();

private:

    string name;

    int blood;

    bool life;

    Point location;

    Weapon weapon;

};

Point::Point(int x,int y):x(x),y(y){}

int Point::getX()

{

    return x;

}

int Point::getY()

{

    return y;

}

void Point::moveTo(int dx,int dy)

{

    this->x=x;

    this->y=y;

}

void Point::move(int dx,int dy)

{

    this->x+=dx;

    this->y+=dy;

}

double Point::distance(const Point &p)

{

    double dx=this->x-p.x;

    double dy=this->y-p.y;

    return (sqrt(dx * dx + dy * dy));

}

Weapon::Weapon(string wnam,int f,double k):wname(wnam),force(f),killRange(k){}

Weapon::Weapon(const Weapon &w):wname(w.wname),force(w.force),killRange(w.killRange){}

string Weapon::getWname()

{

    return wname;

}

int Weapon::getForce()

{

    return force;

}

double Weapon::getKillRange()

{

    return killRange;

}

Role::Role(string nam, int b, Point l, Weapon w):name(nam),blood(b),location(l),weapon(w)

{

    if(blood>0)

        life=true;

    else

        life=false;

}

Role::~Role()

{

    cout<<name<<"退出江湖..."<<endl;

}

void Role::eat(int d){

    blood+=d;

    if(blood>0)

        life=true;

}

void Role::attack(Role &r){

    if(isAlived()&&weapon.getKillRange()>this->distance(r))     {

        blood+=weapon.getForce();

        r.beAttack(weapon.getForce());

    }

}

void Role::beAttack(int f)

{

    blood-=f;

    if(blood<=0)

        life=false;

}

double Role::distance(Role &r)

{

    return location.distance(r.location);

}

bool Role::isAlived()

{

    return life;

}

void Role::moveTo(int x, int y)

{

    if(isAlived())

        location.moveTo(x,y);

}

void Role::move(int dx, int dy)

{

    if(isAlived())

        location.move(dx,dy);

}

void Role::show()

{

    cout<<name<<" has "<<blood<<" blood, hold "<<weapon.getWname();

    cout<<". He is in ("<<location.getX()<<", "<<location.getY()<<") and ";

    if(isAlived())

        cout<<"alived.";

    else

        cout<<"dead.";

    cout<<endl;

}

int main()

{

    Weapon w1("Gold stick",200, 100), w2("Fire point gun",180,300);

    Role wuKong("WuKong", 500, Point(0, 0), w1);

    Role neZha("NeZha", 210, Point(30,30), w2);

    cout<<"---begin---"<<endl;

    wuKong.show();

    neZha.show();

    cout<<"---1st round---"<<endl;

    wuKong.attack(neZha);

    wuKong.show();

    neZha.show();

    cout<<"---2nd round---"<<endl;

    neZha.attack(wuKong);

    wuKong.show();

    neZha.show();

    cout<<"---3rd round---"<<endl;

    neZha.moveTo(100,100);

    wuKong.attack(neZha);

    wuKong.show();

    neZha.show();

    cout<<"---4th round---"<<endl;

    neZha.attack(wuKong);

    wuKong.show();

    neZha.show();

    cout<<"---then---"<<endl;

    neZha.attack(wuKong);

    neZha.attack(wuKong);

    wuKong.attack(neZha);

    wuKong.show();

    neZha.show();

    cout<<"---end---"<<endl;

    return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: