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);
}
代碼實現圖:

