设计并编写代码自动格斗类游戏。
程序员文章站
2022-08-01 19:37:04
1) 角色类CRole为基类: 构造函数、析构函数; 成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值); 成员函数:武器攻击、跳跃。 2)英雄类CHero继承于CRole类 构造函数、析构函数; 英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方 ......
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); }
代码实现图: