P4 游戏中的Human角色
时间: 1ms 内存:128M
描述:
在一个平面打斗游戏中,任何的角色(Role)都有血量(blood)和位置loc(此处loc是Location类的实例)属性。有了Role类,可以派生出不同的角色,如人、神仙、怪兽等。如下程序中,定义了Location类和Role类,人类(Human)中新增了姓名和攻击力数据成员,请为Human类设计成员函数,并实现Role类中的moveTo和addBlood两个成员函数。请在begin和end中间写下需要的代码。你只能编辑并提交begin和end之间的代码。#include <iostream>using namespace std;class Location{private:int x, y;public:Location(int a, int b):x(a),y(b) {}int getX(){return x;}int getY(){return y;}void setXY(int a,int b) {x=a;y=b;}; //设置位置坐标};class Role{public:Role(int rblood, int rx, int ry):blood(rblood),loc(rx,ry) {}void moveTo(int rx, int ry); //移动到(rx, ty)处,要改变loc的值void addBlood(int b); //增加血量,参数为负时,代表减少protected:int blood;Location loc;};void Role::moveTo(int rx, int ry)
{
loc.setXY(rx,ry);
}
void Role::addBlood(int b)
{
blood+=b;
}//************* begin *****************class Human: public Role{public:private:string name; // 姓名int attack; // 攻击力};//************* end *****************int main(){string name;int att, blood, x, y;cin>>name>>att>>blood>>x>>y;Human hum(name,att,blood,x,y); //人name的攻击力att,血量blood,在(x,y)处hum.show();int incAtt, incBlood, newx, newy ;cin>>incAtt;cin>>incBlood;cin>>newx>>newy;hum.addAttack(incAtt); //攻击力增加incAtthum.addBlood(incBlood); //血量增加incBloodhum.moveTo(newx,newy); //人移到了(news,newy)处hum.show();return 0;}
输入:
第一行:名字 血量 攻击力 位置,其中位置处是两个整数,代表平面x、y坐标第二行:增加的攻击力第三行:要增加的血量第四行:新位置,用两个整数代表输入的各部分之间用空格隔开
输出:
分别用两行显示游戏角色的初始状态和调整参数后的状态如“Avanda has 500 attack and 1000 blood in (4,3)”表示Avanda有500攻击力1000血量,在(4,3)位置处
示例输入:
Avanda 500 1000 4 3
-300
200
2 5
示例输出:
Avanda has 500 attack and 1000 blood in (4,3)
Avanda has 200 attack and 1200 blood in (2,5)
提示:
参考答案(内存最优[1268]):
#include <iostream>
using namespace std;
class Location
{
private:
int x, y;
public:
Location(int a, int b):x(a),y(b) {}
int getX(){return x;}
int getY(){return y;}
void setXY(int a,int b) {x=a;y=b;};
};
class Role
{
public:
Role(int rblood, int rx, int ry):blood(rblood),loc(rx,ry) {}
void moveTo(int rx, int ry);
void addBlood(int b); //为负时,代表减少
protected:
int blood;
Location loc;
};
void Role::moveTo(int rx, int ry)
{
loc.setXY(rx,ry);
}
void Role::addBlood(int b)
{
blood+=b;
}
//************* begin *****************
class Human: public Role
{
public:
Human(string hname, int att, int hblood, int hx, int hy):
Role(hblood,hx,hy),name(hname),attack(att) {}
void show()
{
cout<<name<<" has "<<attack<<" attack and "<<blood<<" blood in ("<<loc.getX()<<","<<loc.getY()<<")"<<endl;
}
void addAttack(int att)
{
attack+=att;
}
private:
string name; // 姓名
int attack; // 攻击力
};
//************* end *****************
int main()
{
string name;
int att, blood, x, y;
cin>>name>>att>>blood>>x>>y;
Human hum(name,att,blood,x,y); //人name的攻击力att,血量blood,在(x,y)处
hum.show();
int incAtt, incBlood, newx, newy ;
cin>>incAtt;
cin>>incBlood;
cin>>newx>>newy;
hum.addAttack(incAtt); //攻击力增加incAtt
hum.addBlood(incBlood); //血量增加incBlood
hum.moveTo(newx,newy); //人移到了(news,newy)处
hum.show();
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
using namespace std;
class Location
{
private:
int x, y;
public:
Location(int a, int b):x(a),y(b) {}
int getX(){return x;}
int getY(){return y;}
void setXY(int a,int b) {x=a;y=b;}; //设置位置坐标
};
class Role
{
public:
Role(int rblood, int rx, int ry):blood(rblood),loc(rx,ry) {}
void moveTo(int rx, int ry); //移动到(rx, ty)处,要改变loc的值
void addBlood(int b); //增加血量,参数为负时,代表减少
protected:
int blood;
Location loc;
};
void Role::moveTo(int rx, int ry)
{
loc.setXY(rx,ry);
}
void Role::addBlood(int b)
{
blood+=b;
}class Human: public Role
{
public:
Human(string hname, int att, int hblood, int hx, int hy):
Role(hblood,hx,hy),name(hname),attack(att) {}
void show()
{
cout<<name<<" has "<<attack<<" attack and "<<blood<<" blood in ("<<loc.getX()<<","<<loc.getY()<<")"<<endl;
}
void addAttack(int att)
{
attack+=att;
}
private:
string name; // 姓名
int attack; // 攻击力
};
int main()
{
string name;
int att, blood, x, y;
cin>>name>>att>>blood>>x>>y;
Human hum(name,att,blood,x,y); //人name的攻击力att,血量blood,在(x,y)处
hum.show();
int incAtt, incBlood, newx, newy ;
cin>>incAtt;
cin>>incBlood;
cin>>newx>>newy;
hum.addAttack(incAtt); //攻击力增加incAtt
hum.addBlood(incBlood); //血量增加incBlood
hum.moveTo(newx,newy); //人移到了(news,newy)处
hum.show();
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
