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