OJ期末模考I

2019-04-14 14:43发布

Problem I: P4 游戏中的Human角 {MOD} Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 417  Solved: 245
[Submit][Status][Web Board]
Description 在一个平面打斗游戏中,任何的角 {MOD}(Role)都有血量(blood)和位置loc(此处locLocation类的实例)属性。有了Role类,可以派生出不同的角 {MOD},如人、神仙、怪兽等。如下程序中,定义了Location类和Role类,人类(Human)中新增了姓名和攻击力数据成员,请为Human类设计成员函数,并实现Role类中的moveToaddBlood两个成员函数。 请在beginend中间写下需要的代码。你只能编辑并提交beginend之间的代码。 #include 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);  //攻击力增加incAtt     hum.addBlood(incBlood); //血量增加incBlood     hum.moveTo(newx,newy);  //人移到了(news,newy)     hum.show();     return 0; } Input 第一行:名字血量攻击力位置,其中位置处是两个整数,代表平面xy坐标 第二行:增加的攻击力 第三行:要增加的血量 第四行:新位置,用两个整数代表 输入的各部分之间用空格隔开 Output 分别用两行显示游戏角 {MOD}的初始状态和调整参数后的状态 “Avanda has 500 attack and 1000 blood in (4,3)”表示Avanda500攻击力1000血量,在(4,3)位置处 Sample Input Avanda 500 1000 4 3 -300 200 2 5 Sample Output Avanda has 500 attack and 1000 blood in (4,3) Avanda has 200 attack and 1200 blood in (2,5)       Submit: #include 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: Human(string nam,int att,int blood,int x,int y):Role(blood,x,y),name(nam),attack(att){} int addAttack(int n); void show(); private: string name; // 姓名 int attack; // 攻击力 }; int Human::addAttack(int n) { attack+=n; return attack; } void Human::show() { cout<>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; }