题目描述
编写一个机器人类,包含属性有机器名、血量、伤害值、防御值、类型和等级。其中血量、伤害和防御和等级、类型相关:
普通型机器人,类型为N,血量、伤害、防御是等级的5倍
攻击型机器人,类型为A,攻击是等级的10倍,其他属性和普通的一样
防御型机器人,类型为D,防御是等级的10倍,其他属性和普通的一样
生命型机器人,类型为H,生命是等级的50倍,其他属性和普通的一样。
机器人操作包括:打印、各个属性的获取和设置方法,构造函数可有可无,根据需要自行编写,
编写一个全局函数用于机器人变身,使得各种类型机器人能够相互转变。参数包括机器人对象指针和变身后的机器人类型,功能是修改机器人类型,并更改相关的属性。如果变身类型和机器人原来的类型不同,则执行变身功能,并返回true;如果变身类型和原来类型相同,则不执行变身,并返回false.
要求所有数据成员都是私有属性,用C++语言和面向对象设计思想来编程实现上述要求
输入
第一行输入t,表示要执行t次机器人变身
接着每两行,一行输入一个机器人的属性,包括机器名、类型、等级,机器名最大长度为20,另一行输入变身类型
依次类推输入
输出
每行输出变身后的机器人信息,要求调用机器人的打印方法来输出,即使机器人不变身也输出
属性输出依次为:名称、类型、等级、血量、伤害、防御
最后一行输出执行变身的次数
输入样例1 <-复制
3
X001 N 5
H
X002 A 5
D
X003 D 5
D
输出样例1
X001--H--5--250--25--25
X002--D--5--25--25--50
X003--D--5--25--25--50
The number of robot transform is 2
#include <iostream>
using namespace std;
class Robot{
private:
string name;
char type;
int bloods;
int effectiveness;
int defense;
int grade;
static int sum;
public:
Robot(string _name,char _type,int _grade){
name=_name;
type=_type;
grade=_grade;
}
void setProperty(char type){
switch(type){
case 'N':
bloods=5*grade;
effectiveness=5*grade;
defense=5*grade;
break;
case 'A':
bloods=5*grade;
effectiveness=10*grade;
defense=5*grade;
break;
case 'D':
bloods=5*grade;
effectiveness=5*grade;
defense=10*grade;
break;
case 'H':
bloods=50*grade;
effectiveness=5*grade;
defense=5*grade;
break;
}
}
int getType(){
return type;
}
void setType(char _type){
type=_type;
}
void Printf(){
cout<<name<<"--"<<type<<"--"<<grade<<"--"<<bloods<<"--"<<effectiveness<<"--"<<defense<<endl;
}
static void countSum(){
sum++;
}
static int printSum(){
return sum;
}
};
int Robot::sum=0;
char change(Robot *x,char type2){
if(x->getType()!=type2){
x->setType(type2);
x->setProperty(x->getType());
x->Printf();
x->countSum();
return true;
}else{
x->setProperty(x->getType());
x->Printf();
return false;
}
}
int main(void){
int t;
cin>>t;
string name;
char type1,type2;
int grade;
while(t--){
cin>>name>>type1>>grade;
Robot r(name,type1,grade);
cin>>type2;
change(&r,type2);
}
cout<<"The number of robot transform is "<<Robot::printSum()<<endl;
}