在之前的基础上增加距离等新功能
//孙悟空大战红孩儿
#include<iostream>
#include<string>
using namespace std;
class weapon //武器属性
{
public:
friend class Role;
weapon(string na,int po,int di)
{
name=na;
power=po;
distant=di;
}
int getpower();
string getname();
int getdist();
private:
string name;
int power;
int distant;
};
string weapon::getname()
{
return name;
}
int weapon::getpower()
{
return power;
}
int weapon::getdist()
{
return distant;
}
class Role //角色
{
public:
Role(string nam,int n,string we,int p,int di,int dis);
~Role();
void show();
void attack(Role &other);
void eat(int n);
bool isAlive();
string getname();
int getdistance();
void runaway(Role &r);//逃跑
int deledis();//减小距离
int addpower();//增加武器的威力
int getblood();//血量
private:
string name;
int blood;
weapon weapon; //定义一个武器,也可定义多个武器,例如:weapon weapon[20],表示二十个武器
int distance;
bool life;
};
int Role::getblood()
{
return blood;
}
int Role::addpower ()
{
cout<<name<<"想起了家中的母亲,不能就此死去,他张开大口,三昧真火的颜色变了,攻击力加200"<<endl;
return weapon.power+=200;//将Role类定义为weapon的朋友类,访问weapon的私有成员。
}
int Role::deledis()
{
cout<<name<<"向前推进200米"<<endl;
return distance-=200;
}
void Role::runaway(Role &r)
{
if(blood<20)
cout<<name<<"打不过"<<r.name<<",他逃跑了。"<<endl;
}
int Role::getdistance()
{
return distance;
}
string Role::getname()
{
return name;
}
void Role::attack(Role &other)
{
if(isAlive())
{
cout<<name<<"使用"<<weapon.getname()<<"攻击"<<other.getname()<<',';
if(weapon.getdist()>getdistance())
{
cout<<other.getname()<<"损失"<<weapon.getpower()<<"滴血,";
cout<<name<<"得到"<<weapon.getpower()/2<<"滴血"<<endl;
blood+=weapon.getpower()/2;
other.blood-=weapon.getpower();
if(other.blood<=0)
life=false;
}
else
{
cout<<"但是敌人距离超出武器攻击范围,攻击无效"<<endl;
}
}
}
void Role::eat(int n)
{
if(isAlive())
cout<<name<<"逃跑过程中使用了回血丹,血量增加"<<n<<"点"<<endl;
blood+=n;
}
bool Role::isAlive()
{
return life;
}
Role::Role(string nam,int n,string we,int p,int di,int dis)
:name(nam),blood(n),weapon(we,p,di),distance(dis)//改了参数之后表示weapon的参数为三;
{
if(blood>0)
life= true;
else
life= false;
}
Role::~Role() //析构函数,在程序结束的时候调用
{
if(blood<=0)
cout<<name<<"退出江湖"<<endl;
}
void Role::show()
{
if(blood>0)
cout<<name<<"还剩"<<blood<<"滴血"<<endl;
}
int main( )
{
cout<<"初始状态:"<<endl;
Role mary("孙悟空", 100,"金箍棒",90,100,10); //最后两个是武器的攻击距离,和距离武器的距离
Role jack("红孩儿", 100,"三昧真火",10,150,300);
mary.show();
jack.show();
cout<<"第一回合:"<<endl;
mary.attack(jack);
jack.attack(mary);
mary.runaway(jack);
if(jack.getblood()>0)
jack.runaway(mary);
cout<<"这一回合:"<<endl;
jack.eat(50);
mary.show();
jack.show();
cout<<"第二回合:"<<endl;
jack.deledis();
jack.addpower();
jack.attack(mary);
if(mary.getblood()>0)
mary.attack(jack);
cout<<"这一回合:"<<endl;
mary.show();
jack.show();
cout<<"母爱好伟大!"<<endl;
return 0;
}
运行结果: