机器人变身(类与对象)

题目描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值