設計並編寫代碼自動格斗類游戲。


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);
}

代碼實現圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM