• 设计并编写代码自动格斗类游戏。


    1) 角色类CRole为基类:

    构造函数、析构函数;

    成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值);

    成员函数:武器攻击、跳跃。

    2)英雄类CHero继承于CRole类

    构造函数、析构函数;

    英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方造成伤害具体值由学员自己进行设定;

    3)敌人类CEnemy继承于CRole类

    构造函数、析构函数;

    新增技能劈掌(成员函数)、连环腿(成员函数),给对方造成伤害值由学员自己进行设定;

    4)战斗类CBattle

    构造函数、析构函数及其他成员函数

    双方HP(血量)初始值为100,开始战斗以后,英雄和敌人轮流攻击对方,掉血量=攻击方技能伤害值+ATK(攻击方的攻击力)-DEF(防御方的防御力),当一方血量为0时,战斗结束,玩家经验值增加相应点数,当经验等级达一定时候,玩家等级提升。

    #include<iostream>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    
    class CRole//角色类:基类
    {
        public:
            CRole();
            CRole(char *name,int ATK,int DEF,int Lv,int EXP);//构造函数
            ~CRole(){};
        public:
            char *name;
            int hp;
            int ATK;
            int DEF;
            int Lv;
            int EXP;
        public:
            void WpAttack();//武器攻击
            void jump();//跳跃
    };
    CRole::CRole(char *name,int ATK,int DEF,int Lv,int EXP)
    {
        this->name = name;
        this->hp = 100;
        this->ATK = ATK;
        this->DEF = DEF;
        this->Lv = Lv;
        this->EXP = EXP;
    }
    
    class CHero: public CRole//英雄类
    {
        public :
            CHero(){};
            CHero(char *name,int ATK,int DEF,int Lv,int EXP):CRole(name,ATK,DEF,Lv,EXP){};//构造函数
            ~CHero(){};
        public:
            void Kicking();//踢腿技能
            void Wrestling();//抱摔技能
        public:
            int k_ATK;//踢腿技能攻击力
            int w_ATK;//抱摔技能攻击力
    };
    
    void CHero::Kicking()//使用踢腿技能时,初始化踢腿技能攻击力
    {
        k_ATK = 30;
    }
    
    void CHero::Wrestling()//使用抱摔技能时,初始化抱摔技能攻击力
    {
        w_ATK = 20;
    }
    
    class CEnemy:public CRole//敌人类
    {
        public :
            CEnemy(){};
            CEnemy(char *name,int ATK,int DEF,int Lv,int EXP):CRole(name,ATK,DEF,Lv,EXP){};//构造函数
            ~CEnemy(){};
        public:
            void zp();//劈掌技能
            void lht();//连环踢技能
        public:
            int z_ATK;//劈掌技能攻击力
            int l_ATK;//连环踢技能攻击力
    };
    
    void CEnemy::zp()//使用劈掌技能时,初始化劈掌技能攻击力
    {
        z_ATK = 20;
    }
    
    void CEnemy::lht()//使用连环踢技能时,初始化连环踢技能攻击力
    {
        l_ATK = 30;
    }
    
    class CBattle//战斗类
    {
        public :
            CBattle();//构造函数
            ~CBattle(){};
        public:
            void attacMode(CHero R1,CEnemy R2);//战斗函数
        public:
            int i;
            int temp;
    };
    
    CBattle::CBattle()
    {
        i = 1;
        temp = 0;
    }
    
    void CBattle::attacMode(CHero R1,CEnemy R2)
    {
        srand((unsigned)time(0));//生成随机种子
        while(R1.hp>0&&R2.hp>0)//当英雄和敌人HP都大于0时继续战斗
        {
            temp = rand()%3;//生成0-2随机数
            if(i%2!=0)//当i为奇数时英雄进行攻击
            {
                if(temp==0)//当随机数生成0时,英雄进行普通攻击
                {
                    int harm = R1.ATK-R2.DEF;
                    R2.hp -= harm;
                    cout<<R1.name<<"进行普通攻击,对"<<R2.name<<"造成了"<<harm<<"点伤害
    ";
                }
                if(temp==1)//当随机数生成1时,英雄使用踢腿技能
                {
                    R1.Kicking();
                    int harm = R1.ATK+R1.k_ATK-R2.DEF;
                    R2.hp -= harm;
                    cout<<R1.name<<"使用踢腿"<<"进行攻击,对"<<R2.name<<"造成了"<<harm<<"点伤害
    ";
                }
                if(temp==2)//当随机数生成2时,英雄使用抱摔技能
                {
                    R1.Wrestling();
                    int harm = R1.ATK+R1.w_ATK-R2.DEF;
                    R2.hp -= harm;
                    cout<<R1.name<<"使用抱摔"<<"进行攻击,对"<<R2.name<<"造成了"<<harm<<"点伤害
    ";
                }
            }
            if(i%2==0)//当i为偶数时敌人进行攻击
            {
                if(temp==0)//当随机数生成0时,英雄进行普通攻击
                {
                    int harm = R2.ATK-R1.DEF;
                    R1.hp -= harm;
                    cout<<R2.name<<"进行普通攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害
    ";
                }
                if(temp==1)//当随机数生成1时,敌人使用劈掌技能
                {
                    R2.zp();
                    int harm = R2.ATK+R2.z_ATK-R1.DEF;
                    R1.hp -= harm;
                    cout<<R2.name<<"使用劈掌"<<"进行攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害
    ";
                }
                if(temp==2)//当随机数生成2时,敌人使用连环踢技能
                {
                    R2.lht();
                    int harm = R2.ATK+R2.l_ATK-R1.DEF;
                    R1.hp -= harm;
                    cout<<R2.name<<"使用连环踢"<<"进行攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害
    ";
                }
            }
            i++;
        }
        i = 0;
        if(R1.hp<=0)
        {
            cout<<R1.name<<"死亡
    ";
            R2.EXP +=100;
            if(R2.EXP>=100)
            {
                R2.Lv++;
                cout<<R2.name<<"获得经验"<<100<<" 升级,当前等级为:"<<R2.Lv<<endl;
            }
            cout<<R2.name<<"获胜";
        }
        if(R2.hp<=0)
        {
            cout<<R2.name<<"死亡
    ";
            R1.EXP +=100;
            if(R1.EXP>=100)
            {
                R1.Lv++;
                cout<<R1.name<<"获得经验"<<100<<" 升级,当前等级为:"<<R1.Lv<<endl;
            }
            cout<<R1.name<<"获胜";
        }
    }
    
    int main()
    {
        CHero yx("英雄",5,2,1,0);
        CEnemy dr("敌人",4,2,1,0);
        CBattle battle;
        battle.attacMode(yx,dr);
    }
    

    代码实现图:

  • 相关阅读:
    Apache ECharts
    navicate10破解版 in win
    mysql5.7.23免安装配置说明in win7
    ubuntu安装intellij IDEA ultimate破解
    java1015 leetcode1 twosum approach2 Map-doc generic PESC type argument/(? extends | super %bounded) parameterized type
    笔试题学习(dp,重叠子问题,卡特兰数,手电过桥,最长公共子序列)
    selfish mining:block‐withholding attacks
    矿工找到block的概率分布函数和函数图像
    proof of reserves and proof of liabilities and fractional reserve
    soft fork and hard fork
  • 原文地址:https://www.cnblogs.com/czsy/p/9390483.html
Copyright © 2020-2023  润新知