【id:119】【25分】A. 机器人变身(类与对象)

时间限制
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;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁的BUG最难改

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值