其他分享
首页 > 其他分享> > 2021-10-17

2021-10-17

作者:互联网

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

两人开始对砍了
两人的基础属性

标签:10,17,int,float,jn,sh,ren,2021,pj
来源: https://blog.csdn.net/qq_61345395/article/details/120809137