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

题目描述

编写一个机器人类,包含属性有机器名、血量、伤害值、防御值、类型和等级。其中血量、伤害和防御和等级、类型相关:

普通型机器人,类型为N,血量、伤害、防御是等级的5倍

攻击型机器人,类型为A,攻击是等级的10倍,其他属性和普通的一样

防御型机器人,类型为D,防御是等级的10倍,其他属性和普通的一样

生命型机器人,类型为H,生命是等级的50倍,其他属性和普通的一样。

机器人操作包括:打印、各个属性的获取和设置方法,构造函数可有可无,根据需要自行编写

编写一个全局函数用于机器人变身,使得各种类型机器人能够相互转变。参数包括机器人对象指针和变身后的机器人类型,功能是修改机器人类型,并更改相关的属性。如果变身类型和机器人原来的类型不同,则执行变身功能,并返回true;如果变身类型和原来类型相同,则不执行变身,并返回false.

要求所有数据成员都是私有属性,用C++语言和面向对象设计思想来编程实现上述要求

输入

第一行输入t,表示要执行t次机器人变身

接着每两行,一行输入一个机器人的属性,包括机器名、类型、等级,机器名最大长度为20,另一行输入变身类型

依次类推输入

输出

每行输出变身后的机器人信息,要求调用机器人的打印方法来输出,即使机器人不变身也输出

属性输出依次为:名称、类型、等级、血量、伤害、防御

最后一行输出执行变身的次数

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
using namespace std;
class robert
{
private:
    string name;
    int xue;
    int shang;
    int defend;
    char type;
    int grade;
    static int sum;
public:
    robert() {};
    void print()
    {
        //称、类型、等级、血量、伤害、防御
        cout << name;
        cout << "--" << type << "--" << grade << "--" << xue << "--" << shang << "--" << defend << endl;
    }
    void rob(char type)
    {
        this->type = type;
        if (type == 'N')
        {
            xue = grade * 5;
            shang = grade * 5;
            defend = grade * 5;
            sum++;
        }
        else if (type == 'A')
        {
            //攻击是等级的10倍,
            shang = grade * 10;
            defend = grade * 5;
            xue = grade * 5;
        }
        else if (type=='D')
        {
            xue = grade * 5;
            shang = grade * 5;
            defend = grade * 10;
        }
        else
        {
            xue = grade * 50;
            shang = grade * 5;
            defend = grade * 5;
        }
        sum++;
    }
    //各个属性的获取和设置方法,构造函数可有可无,根据需要自行编写,
    void setname(string n)
    {
        name = n;
    }
    void settype(char t)
    {
        type = t;
    }
    void setgrade(int g)
    {
        grade = g;
    }
    void printsum()
    {
        cout << "The number of robot transform is " << sum << endl;
        sum = 0;
    }
    friend bool change(robert& r, char t);
    //变身函数
};
//包括机器名、类型、等级,机器名最大长度为20,另一行输入变身类型
int robert::sum = 0;
//编写一个全局函数用于机器人变身,使得各种类型机器人能够相互转变
bool change(robert& r, char t)
{
    if (r.type == t)
    {
        return false;
    }
    else
    {
        r.rob(t);//发生了改变
        return true;
    }
}
int main()
{
    int t;
    cin >> t;
    int sum = 0;
    while (t--)
    {
        string name;
        cin >> name;
        char type;
        cin >> type;
        int grade;
        cin >> grade;
        robert r;
        r.setname(name);
        r.settype(type);
        r.setgrade(grade);
        char newtype;
        cin >> newtype;
        if (change(r, newtype))
        {
            r.print();
            sum++;
        }
        //发生了变身
        else
        {
            r.print();
        }
    }
    cout << "The number of robot transform is " << sum << endl;
    sum = 0;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值