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

2018-08-02 05:44:05来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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<<"点伤害\n";
            }
            if(temp==1)//当随机数生成1时,英雄使用踢腿技能
            {
                R1.Kicking();
                int harm = R1.ATK+R1.k_ATK-R2.DEF;
                R2.hp -= harm;
                cout<<R1.name<<"使用踢腿"<<"进行攻击,对"<<R2.name<<"造成了"<<harm<<"点伤害\n";
            }
            if(temp==2)//当随机数生成2时,英雄使用抱摔技能
            {
                R1.Wrestling();
                int harm = R1.ATK+R1.w_ATK-R2.DEF;
                R2.hp -= harm;
                cout<<R1.name<<"使用抱摔"<<"进行攻击,对"<<R2.name<<"造成了"<<harm<<"点伤害\n";
            }
        }
        if(i%2==0)//当i为偶数时敌人进行攻击
        {
            if(temp==0)//当随机数生成0时,英雄进行普通攻击
            {
                int harm = R2.ATK-R1.DEF;
                R1.hp -= harm;
                cout<<R2.name<<"进行普通攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害\n";
            }
            if(temp==1)//当随机数生成1时,敌人使用劈掌技能
            {
                R2.zp();
                int harm = R2.ATK+R2.z_ATK-R1.DEF;
                R1.hp -= harm;
                cout<<R2.name<<"使用劈掌"<<"进行攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害\n";
            }
            if(temp==2)//当随机数生成2时,敌人使用连环踢技能
            {
                R2.lht();
                int harm = R2.ATK+R2.l_ATK-R1.DEF;
                R1.hp -= harm;
                cout<<R2.name<<"使用连环踢"<<"进行攻击,对"<<R1.name<<"造成了"<<harm<<"点伤害\n";
            }
        }
        i++;
    }
    i = 0;
    if(R1.hp<=0)
    {
        cout<<R1.name<<"死亡\n";
        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<<"死亡\n";
        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);
}

代码实现图:

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【共读Primer】5.&lt;1.5&gt; 类简介 Page17

下一篇:【共读Primer】8.&lt;2.1&gt; 基本内置类型(2) Page32