请完整程序中的NPC类。使得程序的运行结果和输出样例完全相同(25分)
题目内容:
请完整程序中的NPC类。使得程序的运行结果和输出样例完全相同
#include <iostream>
using namespace std;
double tax=0; //系统收到的交易税
class NPC{
int role;//角色类型,1:农夫,2:矿工
char skill;//技能,'c':种植,是农夫的技能,'d':挖掘,是矿工的技能
double gold;//金币数量
double corn;//谷物数量
public:
NPC(int _r);//构造函数,新对象的角色值为_r,技能和角色配套,金币和谷物数量都为0
void work();//工作。角色为农夫,谷物数量增加1000;角色为矿工,金币数量增加5
void trade(NPC &p);//交易。交易双方必须为不同类型角色,且农夫的谷物不少于200,矿工的金币不少于4.5
//交易后,农夫的谷物减少200,金币增加4,矿工的金币减少4,谷物增加200。双方各自缴纳0.5个金币的税
double get_corn();//返回corn的值
double get_gold();//返回gold的值
char get_skill();//返回技能
};
int main(){
NPC NP1(1),NP2(2);
for (int i=0;i<3;i++) NP1.work();
NP2.work();
cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()<<' '
<<"NP1.gold:"<<NP1.get_gold()<<endl;
cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()<<' '
<<"NP2.gold:"<<NP2.get_gold()<<endl;
for (int i=0;i<2;i++){
cout<<"trade_"<<i+1<<"----------------------------"<<endl;
NP1.trade(NP2);
cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()
<<' '<<"NP1.gold:"<<NP1.get_gold()<<endl;
cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()
<<' '<<"NP2.gold:"<<NP2.get_gold()<<endl;
cout<<"tax:"<<tax<<endl;
}
return 0;
}
输入格式:
输出格式:
输入样例:
输出样例:
NP1.skill:c NP1.corn:3000 NP1.gold:0
NP2.skill:d NP2.corn:0 NP2.gold:5
trade_1----------------------------
NP1.skill:c NP1.corn:2800 NP1.gold:3.5
NP2.skill:d NP2.corn:200 NP2.gold:0.5
tax:1
trade_2----------------------------
NP1.skill:c NP1.corn:2800 NP1.gold:3.5
NP2.skill:d NP2.corn:200 NP2.gold:0.5
tax:1
代码如下:
#include <iostream>
using namespace std;
double tax=0; //系统收到的交易税
class NPC{
int role;//角色类型,1:农夫,2:矿工
char skill;//技能,'c':种植,是农夫的技能,'d':挖掘,是矿工的技能
double gold;//金币数量
double corn;//谷物数量
public:
NPC(int _r);//构造函数,新对象的角色值为_r,技能和角色配套,金币和谷物数量都为0
void work();//工作。角色为农夫,谷物数量增加1000;角色为矿工,金币数量增加5
void trade(NPC &p);//交易。交易双方必须为不同类型角色,且农夫的谷物不少于200,矿工的金币不少于4.5
//交易后,农夫的谷物减少200,金币增加4,矿工的金币减少4,谷物增加200。双方各自缴纳0.5个金币的税
double get_corn();//返回corn的值
double get_gold();//返回gold的值
char get_skill();//返回技能
};
NPC::NPC(int _r)
{
role=_r;
corn=gold=0;
if(role==1)
{
skill='c';
}
else
skill='d';
}
void NPC::work()
{
if(role==1)
{
corn+=1000;
}
else gold+=5;
}
void NPC::trade(NPC &p)
{
if(role!=p.role)
{
if(gold>=4.5&&p.corn>=200||corn>=200&&p.gold>=4.5)
{
tax++;
if(role==1)
{
corn-=200;
p.corn+=200;
gold+=3.5;
p.gold-=4.5;
}
else
{
corn+=200;
p.corn-=200;
gold-=4.5;
p.gold+=3.5;
}
}
}
}
double NPC::get_corn()
{
return corn;
}
double NPC::get_gold()
{
return gold;
}
char NPC::get_skill()
{
return skill;
}
int main(){
NPC NP1(1),NP2(2);
for (int i=0;i<3;i++) NP1.work();
NP2.work();
cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()<<' '
<<"NP1.gold:"<<NP1.get_gold()<<endl;
cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()<<' '
<<"NP2.gold:"<<NP2.get_gold()<<endl;
for (int i=0;i<2;i++){
cout<<"trade_"<<i+1<<"----------------------------"<<endl;
NP1.trade(NP2);
cout<<"NP1.skill:"<<NP1.get_skill()<<' '<<"NP1.corn:"<<NP1.get_corn()
<<' '<<"NP1.gold:"<<NP1.get_gold()<<endl;
cout<<"NP2.skill:"<<NP2.get_skill()<<' '<<"NP2.corn:"<<NP2.get_corn()
<<' '<<"NP2.gold:"<<NP2.get_gold()<<endl;
cout<<"tax:"<<tax<<endl;
}
return 0;
}