武器杀伤有限制

在之前的基础上增加距离等新功能

//孙悟空大战红孩儿
#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;  
}  



运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值