题目描述
在实验《类定义》的基础,改进并实现游戏中的两个类:奥特曼类和怪兽类。使得两个类更加接近实际要求。奥特曼说明如下:
为每个属性设置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;
}