时间限制
1s
内存限制
128MB
题目描述
编写一个机器人类,包含属性有机器名、血量、伤害值、防御值、类型和等级。其中血量、伤害和防御和等级、类型相关:
普通型机器人,类型为N,血量、伤害、防御是等级的5倍
攻击型机器人,类型为A,攻击是等级的10倍,其他属性和普通的一样
防御型机器人,类型为D,防御是等级的10倍,其他属性和普通的一样
生命型机器人,类型为H,生命是等级的50倍,其他属性和普通的一样。
机器人操作包括:打印、各个属性的获取和设置方法,构造函数可有可无,根据需要自行编写,
编写一个全局函数用于机器人变身,使得各种类型机器人能够相互转变。参数包括机器人对象指针和变身后的机器人类型,功能是修改机器人类型,并更改相关的属性。如果变身类型和机器人原来的类型不同,则执行变身功能,并返回true;如果变身类型和原来类型相同,则不执行变身,并返回false.
要求所有数据成员都是私有属性,用C++语言和面向对象设计思想来编程实现上述要求
输入
第一行输入t,表示要执行t次机器人变身
接着每两行,一行输入一个机器人的属性,包括机器名、类型、等级,机器名最大长度为20,另一行输入变身类型
依次类推输入
输出
每行输出变身后的机器人信息,要求调用机器人的打印方法来输出,即使机器人不变身也输出
属性输出依次为:名称、类型、等级、血量、伤害、防御
最后一行输出执行变身的次数
#include <iostream>
#include <cstring>
using namespace std;
bool transform(class Robot *r, char type);
class Robot
{
private:
char name[21];
char type;
int level;
int hp;
int damage;
int defense;
public:
Robot(const char *n, char t, int l)
{
strcpy(name, n);
type = t;
level = l;
switch (type)
{
case 'N':
hp = 5 * level;
damage = 5 * level;
defense = 5 * level;
break;
case 'A':
hp = 5 * level;
damage = 10 * level;
defense = 5 * level;
break;
case 'D':
hp = 5 * level;
damage = 5 * level;
defense = 10 * level;
break;
case 'H':
hp = 50 * level;
damage = 5 * level;
defense = 5 * level;
break;
default:
type = 'N';
level = 1;
hp = 5 * level;
damage = 5 * level;
defense = 5 * level;
break;
}
}
void print()
{
cout << name << "--" << type << "--" << level << "--" << hp << "--" << damage << "--" << defense << endl;
}
char getType() const { return type; }
void setType(char t) { type = t; }
int getLevel() const { return level; }
void setLevel(int l) { level = l; }
int getHp() const { return hp; }
void setHp(int h) { hp = h; }
int getDamage() const { return damage; }
void setDamage(int d) { damage = d; }
int getDefense() const { return defense; }
void setDefense(int d) { defense = d; }
friend bool transform(Robot *r, char type);
};
bool transform(Robot *r, char type)
{
if (r->type == type)
{
return false;
}
r->type = type;
switch (r->type)
{
case 'N':
r->hp = 5 * r->level;
r->damage = 5 * r->level;
r->defense = 5 * r->level;
break;
case 'A':
r->hp = 5 * r->level;
r->damage = 10 * r->level;
r->defense = 5 * r->level;
break;
case 'D':
r->hp = 5 * r->level;
r->damage = 5 * r->level;
r->defense = 10 * r->level;
break;
case 'H':
r->hp = 50 * r->level;
r->damage = 5 * r->level;
r->defense = 5 * r->level;
break;
default:
r->type = 'N';
r->level = 1;
r->hp = 5 * r->level;
r->damage = 5 * r->level;
r->defense = 5 * r->level;
break;
}
return true;
}
int main()
{
int t;
cin >> t;
int count = 0;
while (t--)
{
char name[21];
char type;
int level;
cin >> name >> type >> level;
Robot r(name, type, level);
cin >> type;
if (transform(&r, type))
{
r.print();
count++;
}
else
{
r.print();
}
}
cout << "The number of robot transform is " << count << endl;
return 0;
}