题目描述
在实验《类定义》的基础,改进并实现游戏中的两个类:奥特曼类和怪兽类。使得两个类更加接近实际要求。奥特曼说明如下:
为每个属性设置get方法,注意奥特曼所有属性都需要
初始化(利用构造函数完成初始化),参数是等级,等级与其他属性的关系:生命是等级10倍,攻击是等级3倍,金钱是等级的10倍,经验开始为0。
逃跑(escape),当生命不超过10点时,奥特曼将逃跑,逃跑将损失所有金钱,战斗结果为奥特曼失败(lose)
攻击(attack),(这个方法要参数么??),当攻击怪兽时,怪兽受到的伤害等于奥特曼攻击力。(本方法实际上就是怪兽被攻击,所以不一定需要实现)
被攻击(attacked),(这个方法要参数么??),当怪兽反击时,奥特曼受到的伤害等于怪兽攻击力的一半,即生命损失=怪兽攻击力值/2,取整处理
回复生命(restore),如果体力不支(生命低于50%但大于10点),每10个金钱可恢复1点生命值。只要有足够的钱,可以一直恢复,直到达到生命值上限(等级的10倍)。
胜利(win),(这个方法要参数么??),当怪兽生命小于等于0,战斗结果为奥特曼胜利(win),奥特曼将获得怪兽身上所有金钱和经验值。
升级(upgrade),战斗结束后,达到升级条件可以升级,条件是经验值不小于等级10倍。升级将扣除相应的经验值,生命满血,更新生命上限和攻击力。
显示状态(display),单行输出,格式如下:
rank=等级 hp=生命 damage=攻击 exp=经验 money=金钱
怪兽说明如下:
为每个属性设置get方法。
初始化(利用构造函数完成初始化),参数是等级,等级与其他属性的关系:生命是等级20倍,攻击是等级2倍,金钱是等级的10倍,经验值是等级的10倍。
被攻击(attacked),(这个方法要参数么??),当奥特曼攻击时,怪兽受到的伤害等于奥特曼攻击力,即生命损失=奥特曼攻击力值
反击(fightback)当怪兽被反击后,如果怪兽不死,将进行反击(本方法实际上就是奥特曼被攻击,所以不一定需要实现)
显示状态(display),单行输出,格式如下:
rank=等级 hp=生命 damage=攻击 exp=经验 money=金钱
请在main函数中实现奥特曼与怪兽的“只抽”,即1对1的战斗过程,具体步骤如下:
cin>>t; //表示有t个测试实例
while (t–) //每个实例就是奥特曼与怪兽的1对1战斗
{
输入奥特曼和怪兽的等级,并调用初始化方法进行对象初始化
输出奥特曼和怪兽状态,调用display方法,每行输出一个
设置战斗标志flag为true,启动战斗循环,具体如下:
while(flag) //当战斗未结束就继续
{ //奥特曼攻击1次,或者是怪兽被攻击1次
if (怪兽没死) //用怪兽生命来判断,用get方法啦{ //怪兽反击1次,或者是奥特曼被攻击1次if (奥特曼不必逃跑) //用奥特曼生命来判断,用get方法啦//奥特曼回血,在方法中判断是否需要加血else{ //奥特曼逃跑,并输出"lose"并回车//输出奥特曼状态,调用display方法//设置flag为false,停止战斗}}else //怪兽死了{ //奥特曼胜利,并输出"win"并回车//输出奥特曼状态,调用display方法//设置flag为false,停止战斗}
}
}
输入
第一行先输入t表示有t个测试实例接着t行输入奥特曼和怪兽的等级
输出
根据题目要求,每个实例输出4行结果:头两行是奥特曼和怪兽的初始状态
第3行是战斗结果
第4行是奥特曼的最终状态
样例输入
2 5 5 5 10
样例输出
rank=5 hp=50 damage=15 exp=0 money=50
rank=5 hp=100 damage=10 exp=50 money=50
win
rank=6 hp=60 damage=18 exp=0 money=50
rank=5 hp=50 damage=15 exp=0 money=50
rank=10 hp=200 damage=20 exp=100 money=100
lose
rank=5 hp=5 damage=15 exp=0 money=0
#include<iostream>
#include <cstring>
using namespace std;
class Ultraman{private:int rank; // 等级 int hp; //生命值 int damage; //攻击力 int exp; //经验 int money; //钱 public:Ultraman(int);void display(); //展示实力 void escape(); //逃跑 void attacked(int); //被攻击 void restore(); //补血 void win(int,int); //胜利 void upgrade(); //升级int get_rank();int get_hp();int get_damage();int get_exp();int get_money();
};
class Monster{private:int rank; // 等级 int hp; //生命值 int damage; //攻击力 int exp; //经验 int money; //钱 public:Monster(int);void attacked(int); //被攻击 int get_rank();int get_hp();int get_damage();int get_exp();int get_money();void display();
};
Ultraman::Ultraman(int a){rank=a;hp=10*a;exp=0;damage=3*a;money=10*a;
}
int Ultraman::get_rank(){return rank;
}
int Ultraman::get_hp(){return hp;
}
int Ultraman::get_damage(){return damage;
}
int Ultraman::get_exp(){return exp;
}
int Ultraman::get_money(){return money;
}
//当生命不超过10点时,奥特曼将逃跑,逃跑将损失所有金钱
void Ultraman::escape(){ money=0;cout<<"lose"<<endl;
}
void Ultraman::win(int _exp,int _money){cout<<"win"<<endl;exp+=_exp;money+=_money; upgrade();
}
void Ultraman::attacked(int monster_damage){hp-=monster_damage/2;
}
void Ultraman::upgrade(){while(exp>=10*rank){exp-=10*rank;rank++;hp=rank*10;damage=rank*3;}
}
void Ultraman::restore(){while(hp<5*rank&&money>=10){hp++;money-=10;}
}
void Ultraman::display(){cout<<"rank="<<rank;cout<<" hp="<<hp;cout<<" damage="<<damage;cout<<" exp="<<exp;cout<<" money="<<money<<endl;
}Monster::Monster(int a){rank=a;hp=20*a;damage=a*2;money=10*a;exp=a*10;
}
int Monster::get_rank(){return rank;
}
int Monster::get_hp(){return hp;
}
int Monster::get_damage(){return damage;
}
int Monster::get_exp(){return exp;
}
int Monster::get_money(){return money;
}
void Monster::attacked(int ultraman_damage){hp-=ultraman_damage;
}
void Monster::display(){cout<<"rank="<<rank;cout<<" hp="<<hp;cout<<" damage="<<damage;cout<<" exp="<<exp;cout<<" money="<<money<<endl;
}int main()
{int lev,t,flag;cin>>t;while(t--){flag=true;cin>>lev;Ultraman Tiga(lev); //迪迦奥特曼 cin>>lev;Monster Viga(lev); //维迦怪兽 Tiga.display();Viga.display();while(flag){Viga.attacked(Tiga.get_damage());if(Viga.get_hp()>0){Tiga.attacked(Viga.get_damage());if(Tiga.get_hp()>10){if(Tiga.get_hp()<Tiga.get_rank()*5){Tiga.restore();} }else{Tiga.escape();Tiga.display();flag=false; }}else{Tiga.win(Viga.get_exp(),Viga.get_money()); Tiga.display();flag=false; }}}return 0;
}