F. 机器人变身(类与对象)

本文介绍了一个C++程序设计,涉及创建一个机器人类,包含不同类型机器人的属性和行为。机器人可以变身,根据给定的类型改变其属性。程序通过输入机器人信息和变身类型,输出变身后的机器人详情,同时记录变身次数。代码实现了面向对象的设计思想,确保数据成员私有并提供了相应的访问方法。
摘要由CSDN通过智能技术生成
题目描述

编写一个机器人类,包含属性有机器名、血量、伤害值、防御值、类型和等级。其中血量、伤害和防御和等级、类型相关:
普通型机器人,类型为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>
#include<string>
#include<iomanip>
#include<cstring>
using namespace std;

class per
{
private:
    string name;
    char type;
    int level;
    int xue;
    int shanhai;
    int fangyu;
    friend bool bianshen(per* ev, char to_type);
public:
    void change(string n, char t, int lev);
    void print();
};

void per::change(string n, char t, int lev)
{
    name = n;
    type = t;
    level = lev;
    if (type == 'N') { xue = 5 * level; shanhai = 5 * level; fangyu = 5 * level; }
    else if (type == 'A') {xue = 5 * level; shanhai = 10 * level; fangyu = 5 * level;}
    else if(type=='D'){ xue = 5 * level; shanhai = 5 * level; fangyu = 10 * level; }
    else if(type=='H'){ xue = 50 * level; shanhai = 5 * level; fangyu = 5 * level; }
}

bool bianshen(per* ev, char to_type)
{
    if (to_type == ev->type)
    {
        return false;
    }
    else
    {
        if (to_type == 'N')
        {
            ev->change(ev->name, 'N', ev->level);
        }
        else if (to_type == 'A')
        {
            ev->change(ev->name, 'A', ev->level);
        }
        else if (to_type == 'D')
        {
            ev->change(ev->name, 'D', ev->level);
        }
        else if (to_type == 'H')
        {
            ev->change(ev->name, 'H', ev->level);
        }
        return true;
    }
}

void per::print()
{
    cout << name << "--" << type << "--" << level << "--" << xue << "--" << shanhai << "--" << fangyu << endl;
}

int main()
{
    string name;
    char type;
    int lev;
    char to_type;
    int t,cn=0;
    cin >> t;
    while (t--)
    {
        cin >> name >> type >> lev;
        per ev;
        ev.change(name, type, lev);
        per* p = &ev;
        cin >> to_type;
        if (bianshen(p, to_type))
        {
            ev.print();
            cn++;
        }
        else
        {
            ev.print();
        }
    }
    cout << "The number of robot transform is " << cn << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZZZWWWFFF_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值