C++奥特曼打怪兽系列
发布日期:2021-05-10 03:28:38 浏览次数:21 分类:原创文章

本文共 9104 字,大约阅读时间需要 30 分钟。

题目描述
在前面实验的基础上,根据题目要求进行修改,实现打斗过程。

  1.  怪兽分为四种类型(定义四个类):

普通型怪兽(NMonster):攻击力是等级2倍,生命是10倍,金钱经验是10倍

攻击型怪兽(AMonster):攻击力是等级4倍,生命是5倍,金钱经验是10倍

防御型怪兽(DMonster):攻击力是等级1倍,生命是20倍,金钱经验是10倍

肉鸡型怪兽(SMonster):攻击力是等级1倍,生命是10倍,金钱经验是20倍

  1.  定义一个守护神类(Angel),该类定义怪兽或奥特曼的守护神,为怪兽或奥特曼提供帮助。守护神等级为所守护对象的等级(例如守护神a1守护等级为3的攻击型怪兽am1,则a1的等级也为3),攻击是等级的一半,无生命。怪兽的守护神金钱和经验都为等级的5倍。奥特曼的守护神金钱和经验为0,等级随守护对象升级而升级。
  2.  为四个怪兽类和奥特曼类添加守护神对象成员,使它们都成为复合类。
  3.  当奥特曼战胜怪兽后,将获得怪兽及其守护神的经验金钱。
  4.  修改奥特曼类和怪兽类相关成员函数,实现守护神类与它们的关系,具体如下:

奥特曼,守护神为它攻击攻击型怪兽时,加1点攻击力,而在它攻击防御型怪兽时,加2点攻击力,在获得肉鸡型怪兽的金钱和经验时,翻倍(获得怪兽的经验和金钱翻倍)。

普通型怪兽和肉鸡型怪兽,无守护神。

攻击型怪兽,守护神为它在攻击奥特曼时,也打一次,使奥特曼除了受到怪兽攻击,还将将受到守护神攻击力的伤害。

防御型怪兽,守护神为它受到奥特曼攻击时,将生命损失减半。


outman(奥特曼类对象)这个热血骚年总是叫嚷“一个打十个”,叫的老天爷都不耐烦了。这次outman傻眼了,是一个打4个。现在让我们来为outman欢呼吧,围观吧(记得带上板凳瓜子和鸡蛋,不好看的话就扔扔)。

请在main函数中实现如下架构

    while (t--)  //每个实例就是奥特曼与个怪兽的战斗    {            //输入奥特曼等级值,利用等级值,声明一个奥特曼对象并初始化。         //输出奥特曼状态,调用display方法,每行输出一个         //输入个怪兽的等级,依次为普通型怪兽、肉鸡型怪兽、防御型怪兽、攻击型怪兽,保存在数组mgrad[4]中         //创建种类型怪兽对象并利用等级值mgrad初始化。         //输出每个怪兽的状态,调用display方法,每行输出一个         //设置战斗标志flag为true,与每个怪兽的战斗结果winflag1=0,winflag2=0,winflag3=0,winflag4=0。         //启动战斗循环,具体如下:             while(flag) //4个怪兽群殴奥特曼             {                       //奥特曼攻击每个怪兽1次                                   if (如果怪兽i没死)  //如果怪兽i没死,怪兽i攻击奥特曼,注意:只要没死的怪兽,都攻击奥特曼次。                  {                           //怪兽i反击1次                                           if (奥特曼不逃跑)     //如果奥特曼不逃跑,用奥特曼生命来判断                      //奥特曼回血,在方法中判断是否需要加血                      else                      {      //奥特曼逃跑,设置逃跑标志eflag为true,并输出"lose"并回车                          //输出奥特曼状态,调用display方法                                                     //设置flag为false,停止战斗                      }                  }                  else if(怪兽是这一轮死的)//如果怪兽这一轮死了                  {                           //奥特曼胜利,并输出"win"并回车                      //奥特曼升级                      //输出奥特曼状态,调用display方法                      //设置打赢标记winflagi为true                  }                  if(所有怪兽都死了){   //所有怪兽都死了,用个打赢标记判断                      //结束战斗,设置flag为false,并输出“win all”                  }             }//end of while flag

输入
第1行输入t表示有t个测试实例

对于每个测试实例,首行先输入奥特曼等级

接着4行依次输入普通型、肉鸡型、防御型、攻击型怪兽的等级

输出
输出奥特曼和每个怪兽的战斗结果,具体要求参考程序框架

样例输入

253333510101010

样例输出

rank=5 hp=50 damage=15 exp=0 money=50rank=3 hp=30 damage=6 exp=30 money=30rank=3 hp=30 damage=3 exp=60 money=60rank=3 hp=60 damage=3 exp=30 money=30rank=3 hp=15 damage=12 exp=30 money=30winrank=5 hp=45 damage=15 exp=45 money=95winrank=6 hp=60 damage=18 exp=25 money=125winrank=8 hp=80 damage=24 exp=15 money=245winrank=8 hp=76 damage=24 exp=60 money=290win allrank=5 hp=50 damage=15 exp=0 money=50rank=10 hp=100 damage=20 exp=100 money=100rank=10 hp=100 damage=10 exp=200 money=200rank=10 hp=200 damage=10 exp=100 money=100rank=10 hp=50 damage=40 exp=100 money=100loserank=5 hp=8 damage=15 exp=0 money=0
#include <iostream>#include<cstdlib>using namespace std;// dcs守护神class Angle {   private:    int rank, money, exp, damage;public:    Angle() {   };    void angle_monster(int r) {           rank = r; damage = rank / 2; exp = rank*5; money = rank*5;    }    int getmoney() {    return money; }    int getexp() {    return exp; }    int getdamage() {    return damage; }};//奥特曼类的界面class Ultraman {   private:    int rank, exp, hp, damage, money;    Angle angle_outman;public:    Ultraman() {   };    Ultraman(int a);    ~Ultraman();    int getHp() {    return hp; };    int getexp() {    return exp; };    int getdamage() {    return damage; };    int getmoney() {    return money; };    int getrank() {    return rank; };    void display();    void escape();    int attack();    void attacked(int dam);    void restore();    void win(int ex, int m);    void allwin();    void upgrade();};// .......//怪兽类的界面class Monster {   public://考虑到后面要用继承,所以把所有属性设为public    int rank, hp, damage, money, exp;    Monster() {   };    Monster(int b);    int fightback() {    return damage; };    void attacked(int dam);    void display();    int getHp() {    return hp; };    int getMoney() {    return money; };    int getExp() {    return exp; };};// .......//这里开始写类的实现代码//奥特曼类的实现Ultraman::Ultraman(int a) {       rank = a; hp = rank * 10; damage = rank * 3; money = rank * 10; exp = 0;    }Ultraman::~Ultraman() {   }void Ultraman::display() {       cout << "rank=" << rank << " hp=" << hp << " damage=" << damage << " exp=" << exp << " money=" << money << endl;};void Ultraman::escape() {       money = 0;    cout << "lose" << endl;};int Ultraman::attack() {       //返回伤害值    return damage;};void Ultraman::attacked(int dam) {       hp -= dam / 2;};void Ultraman::restore() {       while (hp < (rank * 10)) {           if (money >= 10) {               hp++; money -= 10;        }        else break;    }};void Ultraman::win(int ex, int m) {       exp += ex, money += m;    cout << "win" << endl;};void Ultraman::allwin() {       cout << "win all" << endl;}void Ultraman::upgrade() {       while (exp >= (rank * 10)) {           exp -= (rank * 10); rank++; hp = rank * 10; damage = rank * 3;    }};//怪兽类的实现Monster::Monster(int b) {       rank = b; hp = rank * 20; damage = rank * 2; money = rank * 10; exp = rank * 10;}void Monster::attacked(int dam) {       hp -= dam;}void Monster::display() {       cout << "rank=" << rank << " hp=" << hp << " damage=" << damage << " exp=" << exp << " money=" << money << endl; }class NMonster :public Monster {   public:    NMonster(int b) {           rank = b; hp = rank * 10; damage = rank * 2; money = rank * 10; exp = rank * 10;    }};class AMonster :public Monster {   public:    Angle angle;    AMonster(int b) {           rank = b; hp = rank * 5;         angle.angle_monster(rank);        damage = rank * 4;        money = rank * 10; exp = rank * 10;    }};class DMonster :public Monster {      public:    Angle angle;    DMonster(int b) {           rank = b; hp = rank * 20; damage = rank;         angle.angle_monster(rank);        money = rank * 10 ; exp = rank * 10 ;    }};class SMonster :public Monster {   public:    SMonster(int b) {           rank = b; hp = rank * 10; damage = rank ; money = rank * 20; exp = rank * 20;    }};//下面是测试主程序int main(){       int t; cin >> t;    while (t--) {           int f[4] = {    0 }; for (int m = 0; m < 4; m++) {    f[m] = 1; }        int* ip = new int[5];        for (int i = 0; i < 5; i++) cin >> ip[i];        Ultraman u(ip[0]);   NMonster oa(ip[1]); SMonster ob(ip[2]);   DMonster oc(ip[3]); AMonster od(ip[4]);        delete []ip;        u.display();    oa.display();    ob.display();    oc.display();   od.display();        bool flag = true;        int tem = 0;        while (flag) {               int damage = u.getdamage();            if(f[0]==1) oa.attacked(damage);            if(f[1]==1) ob.attacked(damage);             if(f[2]==1) oc.attacked((damage+2)/2);             if(f[3]==1) od.attacked(damage+1);            if (oa.getHp() > 0) {                   u.attacked(oa.fightback());                if ((u.getHp() > 10) && (u.getHp() < u.getrank() * 5)) {                       u.restore();                }                else if (u.getHp() <= 10) {                       u.escape(); u.display(); flag = false;                }            }            else if ((oa.getHp() <= 0) &&(f[0]==1)) {                   u.win(oa.getExp(), oa.getMoney()); u.upgrade(); u.display(); tem++; f[0] = 0;            }            if (ob.getHp() > 0) {                   u.attacked(ob.fightback());                if ((u.getHp() > 10) && (u.getHp() < u.getrank() * 5)) {                       u.restore();                }                else if (u.getHp() <= 10) {                       u.escape(); u.display(); break;                }            }            else if ((ob.getHp() <= 0)&&(f[1]==1)) {                   u.win((ob.getExp() * 2), (ob.getMoney() * 2)); u.upgrade(); u.display(); tem++; f[1] = 0;            }             if (oc.getHp() > 0) {                   u.attacked(oc.fightback());                if ((u.getHp() > 10) && (u.getHp() < u.getrank() * 5)) {                       u.restore();                }                else if (u.getHp() <= 10) {                       u.escape(); u.display();break;                }            }            else if ((oc.getHp() <= 0)&&(f[2]==1)) {                    u.win(oc.getExp()+oc.angle.getexp(), oc.getMoney()+oc.angle.getmoney()); u.upgrade(); u.display(); tem++; f[2] = 0;            }             if (od.getHp() > 0) {                    u.attacked(od.fightback() + od.angle.getdamage());                 if ((u.getHp() > 10) && (u.getHp() < u.getrank() * 5)) {                        u.restore();                 }                 else if (u.getHp() <= 10) {                        u.escape(); u.display(); break;                 }             }             else if ((od.getHp() <= 0)&&(f[3]==1)) {                    u.win((od.getExp() + od.angle.getexp()), (od.getMoney() + od.angle.getmoney()));    u.upgrade();   u.display();     tem++; f[3] = 0;             }             if (tem == 4) {                    flag = false;  tem = 0;                 u.allwin();            }        }    }    return 0;}
上一篇:JS ES6中export和import史上最全
下一篇:前端组件之Bootstrap与Ant design of Vue

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月21日 05时19分32秒