C++奥特曼打怪兽系列

简介: C++奥特曼打怪兽系列

题目描述

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

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

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

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

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

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

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

奥特曼,守护神为它攻击攻击型怪兽时,加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行依次输入普通型、肉鸡型、防御型、攻击型怪兽的等级

输出

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

样例输入

2
5
3
3
3
3
5
10
10
10
10

样例输出

rank=5 hp=50 damage=15 exp=0 money=50
rank=3 hp=30 damage=6 exp=30 money=30
rank=3 hp=30 damage=3 exp=60 money=60
rank=3 hp=60 damage=3 exp=30 money=30
rank=3 hp=15 damage=12 exp=30 money=30
win
rank=5 hp=45 damage=15 exp=45 money=95
win
rank=6 hp=60 damage=18 exp=25 money=125
win
rank=8 hp=80 damage=24 exp=15 money=245
win
rank=8 hp=76 damage=24 exp=60 money=290
win all
rank=5 hp=50 damage=15 exp=0 money=50
rank=10 hp=100 damage=20 exp=100 money=100
rank=10 hp=100 damage=10 exp=200 money=200
rank=10 hp=200 damage=10 exp=100 money=100
rank=10 hp=50 damage=40 exp=100 money=100
lose
rank=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;
}
相关文章
|
Android开发
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
2115 1
|
8月前
|
人工智能 弹性计算 安全
阿里云计算巢私有化MCP市场:企业级AI工具的安全部署新选择
阿里云计算巢私有化MCP市场,依托阿里云弹性计算资源,提供自主可控的私有化部署方案。支持OpenAPI、SSE、StreamableHttp等多种接入方式,结合Higress云原生网关实现高效网络控制,所有工具直接部署在用户云账号下,5分钟极速部署,保障数据安全与使用便捷性。适用于对数据安全要求高、需访问内网资源、服务隔离及统一管理多种MCP工具的企业场景。
|
9月前
|
Java API 微服务
2025 年 Java 核心技术全面升级与实战应用详解
这份Java校招实操内容结合了最新技术趋势,涵盖核心技术、微服务架构、响应式编程、DevOps及前沿技术等六大模块。从函数式编程到Spring Cloud微服务,再到容器化与Kubernetes部署,帮助你掌握企业级开发技能。同时,提供AI集成、区块链实践和面试技巧,包括高频算法题与系统设计案例。通过学习这些内容,可应对90%以上的Java校招技术面试,并快速上手实际项目开发。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
956 41
|
监控 前端开发 测试技术
如何使用 Tree Shaking 进行代码优化
Tree Shaking 是一种通过去除未使用的代码来优化项目打包体积的技术,在现代前端开发中被广泛应用
|
机器学习/深度学习 人工智能 算法
人工智能的三大主义--——行为主义(actionism),连接主义 (connectionism)
这段内容涵盖了人工智能领域的重要概念和历史节点。首先介绍了布鲁克斯的六足行走机器人及Spot机器狗,被视为新一代“控制论动物”。接着解释了感知机作为最简单的人工神经网络,通过特征向量进行二分类。1974年,沃伯斯提出误差反向传播(BP)算法,利用梯度调整权重以优化模型。最后,阐述了符号主义、连接主义和行为主义三大学派的发展与融合,强调它们在持续学习中共同推动人工智能的进步。
人工智能的三大主义--——行为主义(actionism),连接主义 (connectionism)
|
存储 安全 网络安全
网络安全法律框架:全球视角下的合规性分析
网络安全法律框架:全球视角下的合规性分析
435 1
|
小程序
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
736 1
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
|
IDE Linux 开发工具
linux镜像下载和vmware虚拟主机部署
linux镜像下载和vmware虚拟主机部署
1286 0
linux镜像下载和vmware虚拟主机部署
|
消息中间件 资源调度 算法
FreeRTOS最全教程(目录)
FreeRTOS最全教程(目录)
1797 1
|
存储 缓存 算法
四、深入剖析【离屏渲染】原理
深入剖析【离屏渲染】原理
851 0
四、深入剖析【离屏渲染】原理