用c++写了小小的文字游戏
目前只写了一个基本的对打模式,还有好多扩展功能没写,这里是利用usleep创造一个时间,然后两人开始对打,这里可以添加技能,攻击速度,等,还有那些流血,中毒状态,没写,太麻烦了。
#include<iostream>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<unistd.h>
using namespace std;
#define PUGO 100
#define MAXJINE 10
#define JINESTART 100
#define JINETOP 200
#define JINEDAGO 150
#define JINEDOGO 151
基础数据结构与配套函数
typedef struct jicusx
{
int id;
char name[25];
int hp; //生命
int mp; //内力
int dg; //低攻
int gg; //高攻
int df; //低防
int gf; //高防
int gjsd;//攻击速度
int bj; //暴击率;
int mz; //命中
int sb; //闪避
int shjm;//伤害减免点数
int fjsh;//附加伤害点
int xx; //吸血点数
float smhf;//生命回复
float mphf;//内力回复
float xxbf;//吸血百分比
float jmbf;//伤害减免百分比
float bjsh;//暴击伤害
float gjbf;//攻击提升百分比
float fybf;//防御百分比
float pgbf;//普功百分比
float jnbf;//技能伤害百分比
float pgjm;//普功伤害减免百分比
float jnjm;//技能伤害减免
float jnnq;//技能冷却
}JICU,*PJICU;
void GuiNing(PJICU p)//基础数据归零
{
p->id=0;p->mp=0;
strcpy(p->name,"无名");
p->hp = p->dg = p->gg = 0;
p->df = p->gf = p->gjsd = 0;
p->bj = p->mz = p->sb = 0;
p->shjm = p->fjsh = p->xx = 0;
p->xxbf = p->jmbf =p->bjsh = 0.0f;
p->gjbf = p->fybf =p->pgbf = 0.0f;
p->jnbf = p->jnnq = p->pgjm= 0.0f;
p->jnjm = p->smhf = p->mphf=0.0f;
}
基础数据结构与配套函数
技能数据结构与初始化函数
typedef struct jinen
{
int id; //技能ID
char name[25];//技能名称
int maxdj; //最高等级
int jndj; //技能等级
int jnjy; //技能经验
int sjjy; //升级经验
int mp; //耗蓝量
int cd; //冷却时间
int cds; //冷却计时
int chu; //出招时间
int suo; //收招时间
int zhon; //中招时间
int zt; //技能状态
int sh; //伤害参数
int fy; //防御参数
int bl; //附加参数
float bfb; //百分比参数
float bff; //百分比防参数
float shbf;//技能伤害百分比
}JINE,*PJINE;
struct JPDATA //*数据
{
char a; //*标注
int aa; //*属性
char b; //*标注
int bb; //*属性
char c; //*标注
float cc;//*属性
};
struct TKdata //头盔数据
{
int id; //头盔ID
char name[15];//头盔名字
int df; //低防
int gf; //高防
int dg; //低攻
int gg; //高攻
JPDATA jpsx;//*属性
char js[60];
};
void JiNeGL(PJINE p)
{
p->id =0;p->jndj=p->sjjy=0;
p->jndj=3;p->jnjy=200;
strcpy(p->name,"无技能");
p->cd=p->cds=p->chu=0;
p->suo=p->zhon=p->zt=0;
p->sh=p->fy=p->bl=p->mp=0;
p->bfb=p->bff=p->shbf=0.0f;
}
技能数据结构与初始化函数
///角色对象
class Renwu
{
private:
PJICU ren; //基础属性
JINE jn[MAXJINE]; //技能结构
int zbhp; //装备生命
float mphf; //内力回复
int cz; //出招状态
public:
int yahp; //使用生命
int mp; //内力
int dj; //人物等级
int jyz; //经验值
int sjjy; //升级经验
Renwu():ren(NULL)
{}
Renwu(PJICU pr):ren(pr)
{
zbhp=yahp=pr->hp;
mp=dj=jyz=sjjy=0;
cz=-1;
for(int i=0;i<MAXJINE;i++)
jn[i].id=-1;
}
~Renwu()
{if(ren) delete ren;
}
void OutSX(); //输出角色属性
bool IsEmpty();//是否无角色
int PuGo(); //普功输出
int FanYu(int sh);//防御伤害
bool MinZhon(int sb);//命中
int GetSB() //获取闪避
{return ren->sb;}
void AddJN(PJINE p,int id,int i);
//添加技能与普功
int JiNeTime();//技能冷却计时
int JiNeGJ();//技能输出
};
//角色对象
/主函数
int main()
{
srand(time(NULL));
//创建一个角色
PJICU p=new JICU;
GuiNing(p);
p->id=1;
strcpy(p->name,"张无忌");
p->dg=1;p->gg=5;
p->df=0;p->gf=2;
p->hp=40;
p->mz=70;
p->sb=5;
Renwu re(p);
re.mp=50;
//创建第二个角色
p=new JICU;
GuiNing(p);
p->id=2;
strcpy(p->name,"冷狐冲");
p->dg=2;p->gg=4;
p->df=1;p->gf=1;
p->hp=35;
p->mz=75;
p->sb=6;
Renwu re2(p);
re2.mp=40;
//为角色添加普功
{PJINE pj; //为角色添加一个普功
pj=new JINE;
JiNeGL(pj);
strcpy(pj->name,"普功");
pj->cd=37;
pj->id=100;
pj->cds=0;
pj->chu=1;
pj->zhon=19;
pj->suo=37;
pj->bff=1.0f;
re.AddJN(pj,PUGO,0);
pj->suo=35;
re2.AddJN(pj,PUGO,0);
//为冷狐冲添加一个技能
strcpy(pj->name,"华山剑法");
pj->cd=184;
pj->id=151;
pj->cds=0;
pj->chu=1;
pj->zhon=11;
pj->suo=29;
pj->bff=0.6f;
pj->mp=12;
pj->sh=3;
re2.AddJN(pj,151,1);
strcpy(pj->name,"七伤拳");
pj->cd=204;
pj->id=101;
pj->cds=0;
pj->chu=1;
pj->zhon=25;
pj->suo=33;
pj->bff=1.3f;
pj->mp=15;
pj->sh=5;
re.AddJN(pj,101,1);
delete pj;
}
re.OutSX();
re2.OutSX();
//pk战场
int sh;
int gg=300;
do
{
usleep(32000);
sh=re.JiNeTime();
sh=re.JiNeGJ();
if(sh > -1)
{
if(re.MinZhon(re2.GetSB()))
{
if(sh > re2.yahp) sh=re2.yahp;
re2.yahp-=sh;
cout << ":-"<<sh<< endl;
cout <<"冷狐冲的生命:" <<re2.yahp<<endl<<endl;
}
else cout << "未击中" << endl;
}
sh=re2.JiNeTime();
sh=re2.JiNeGJ();
if(sh > -1)
{
if(re2.MinZhon(re.GetSB()))
{
if(sh > re.yahp) sh=re.yahp;
re.yahp-=sh;
cout <<":-"<<sh<< endl;
cout <<"张无忌的生命:" <<re.yahp<<endl<<endl;
}
else cout << "未击中" << endl;
}
}while(!(re2.yahp<1||re.yahp<1));
//pk结束
if(re2.yahp>0) cout << "令狐冲获胜!" << endl;
else if(re.yahp>0) cout << "张无忌获胜!" << endl;
else cout << "平局!" << endl;
return 0;
}
/主函数结尾断
int Renwu::JiNeGJ()
{
if(jn[cz].id<JINEDOGO && jn[cz].cds==jn[cz].zhon)
{cout<<jn[cz].name; return PuGo()*jn[cz].bff+jn[cz].sh;}
else if(jn[cz].id>JINEDAGO && (jn[cz].cds%jn[cz].zhon==0))
{
cout <<jn[cz].name;
return PuGo() * jn[cz].bff +jn[cz].sh;
}
else if(jn[cz].cds>=jn[cz].suo)
{
jn[cz].cds=0;cz=-1;
}
return -1;
}
int Renwu::JiNeTime()
{
int i;
for(i=0;i<MAXJINE;i++)
if(jn[i].id >= JINESTART&&jn[i].id<=JINETOP)
{
if(jn[i].cds<jn[i].cd) jn[i].cds++;
//if(jn[i].cds >= jn[i].cd)
//{
// if(i==1)cout <<"七伤拳己好"<< endl;
// jn[i].cds=-1;cz=-1;
//}
}
if(cz==-1)
{
for(i=MAXJINE-1;i>0;i--)
if(jn[i].id > JINESTART && jn[i].cds>=jn[i].cd && mp>=jn[i].mp)
{
jn[i].cds=1;cz=i;
mp-=jn[i].mp; return jn[cz].cds;
}
cz= 0;jn[0].cds=1;
return jn[i].cds;
}
else return jn[cz].cds;
}
void Renwu::AddJN(PJINE p,int id,int i)
{
if(i >= MAXJINE || i < 0) return ;
jn[i] = *p;
jn[i].id=id;
//strcpy(jn[i].name,p->name);
//cout << "技能:" <<jn[i].name<< endl;
}
bool Renwu::MinZhon(int sb)
{
int mz;
mz=ren->mz-sb;
if(mz<1) return false;
sb=rand()%100;
if(sb<=mz) return true;
return false;
}
int Renwu::FanYu(int sh)
{
int f;
if(ren->gf<=ren->df) f=ren->df;
else f = rand()%(ren->gf-ren->df+1)+ren->df;
sh-=f;
if(sh<1) return 1;
return sh;
}
int Renwu::PuGo()
{
if(ren->gg <= ren->dg) return ren->dg;
return rand()%(ren->gg-ren->dg+1)+ren->dg;
}
bool Renwu::IsEmpty()
{
if(ren!=NULL) return true;
return false;
}
void Renwu::OutSX()
{
if(!ren) return ;
cout << "等级:" <<dj<<endl;
cout << ren->name<< endl;
cout << "技能:" <<jn[0].name<<endl;
cout << "生命:" <<yahp<<endl;
cout << "内力:" <<mp<<endl;
cout << "内攻:" <<ren->dg<<"-"<<ren->gg<<endl;
cout << "防御:" <<ren->df<<"-"<<ren->gf<<endl;
cout << "命中:" <<ren->mz<<endl;
cout << "闪避:" <<ren->sb<<endl;
}