⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fight1.cpp

📁 轩辕2源代码.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <stdlib.h>
#include <string.h>
#include <lsys.h>
#include <ldraw.h>
#include <lkey.h>
#include <time.h>
#include "ls.h"
#include "internal.h"

////////////////////////////////////////////////////////////////////////////
FIGHT_DAT     fd;
LSURFACE      ls;
TLpcImage  fapic;
TLpcImage  fepic;
TLpcImage  act1_fight;
TLpcImage  menu_p;
ENEMY      en[40];
ACTOR      ac[50];
STOR       st[90];
MAGIC      mg[20];
int over_data1[320*240];
int    debug;
int factor_num;
int fenemy_num;
int factor[8];
int fenemy[8];
int press_count,f_f,f_i;
int fplace,fe_x[4],fa_x[5];
int menu,mode_mf;
int Actor_pic[4][3];
char *fback,*jt;
int fight_delay=1193181/30;
int get_exp=0;
int over_data2[320*240];
////////////////////////////////////////////////////////////////////////////
#define FIGHT_ENEMY    0
#define FIGHT_ENEMY01  1
#define FIGHT_ACTOR    2
#define FIGHT_ACTOR01  3
#define FIGHT_MENU     4
#define FIGHT_BACKG    5
#define FIGHT_MAGIC01  6
#define FIGHT_MAGIC02  7
#define FIGHT_JIANTOU  8
int  random2(int size);
int  Fight_Init();
void Fight_UnInit();
int  DataInit();
void f_getname(int index,char *s);
int  Create_Enemy(int Enemy_No,int Create_mode);
void Fighter_View();
void Fighter_count();
int  PicLoad(short p);
void Fight_Control();
void Fight_Menu();
void Fight_Scr_View();
void Actor_HMP();
int Noop(int delay_);
int Fight();
int  Choice_Enemy();
void change_color();
void Menu_Video();
void Dead(int ID,int actor_mode);
void Windows_draw(int x,int y,int len,int wid,int no);
int Choice_magic(int Actor_No);
void Magic_Name_View(int Actor_No);
int Choice_goods();
void Choice_box(int x,int y,int wid);
void Magic_list(int Magic_id,int ac_no);
void scr_view(int dbf,int scr);
void Victory_Fight(int mode);
void Failed_Fight();

////////////////////////////////////////////////////////////////////////////
int random2(int size)
{ unsigned long t,time;
  _disable();
  outp(0x43,0);
  t=inp(0x40);
  t+=(inp(0x40)<<8);
  t=0xffff^t;
  _enable();
  time=(clock()<<16)+t;
  return (time^0xffffffff)%size;
}
int Fight_Init()
{lCreateSurface(320,480,&ls,NULL,LSM_MEMORY);
 lActiveSurface(&ls);
 fapic.count=fepic.count=0;
 act1_fight.count=menu_p.count=0;
 if (PicLoad(0)) return -1;
 if (DataInit()) return -1;
 lt_install_int_ex(change_color,1193181/18);
 Menu_Video();
 return 0;
}
void Fight_UnInit()
{lt_remove_int(change_color);
 if (jt) delete jt;
 if (fback) delete fback;
 lDestroyLpc(&fapic);
 lDestroyLpc(&fepic);
 lDestroyLpc(&act1_fight);
 lDestroyLpc(&menu_p);
 lDeleteSurface(&ls);
}
int Noop(int delay_)
{ world.noop(delay_);
  return 0;
}
int PicLoad(short p)
{char fname[200];
 short len,wid,i,error=0;

 f_getname(FIGHT_ENEMY01,fname);
 if (lLoadLpcImage(&fepic,fname,0)) {
    voc.regist_msg("load enemy01 %s error",fname);
    error=-1;
 }
 f_getname(FIGHT_ACTOR01,fname);
 if (lLoadLpcImage(&fapic,fname,0)) {
    voc.regist_msg("load actor01 %s error",fname);
    error=-2;
 }
 f_getname(FIGHT_ACTOR,fname);
 if (lLoadLpcImage(&act1_fight,fname,0)) {
    voc.regist_msg("load actor %s error",fname);
    error=-3;
 }
 f_getname(FIGHT_MENU,fname);
 if (lLoadLpcImage(&menu_p,fname,0)) {
    voc.regist_msg("load menu %s error",fname);
    error=-4;
 }
 f_getname(FIGHT_BACKG,fname);
 fback=lrPicFile(fname,0,NULL);
 if (!fback) error=-5;
 lActiveSurface(&ls);
 lgPutImage(0,240,319,479,fback);
 if (fback==NULL) voc.regist_msg("error load %s",fname);
 f_getname(FIGHT_JIANTOU,fname);
 jt=lrPicFile(fname,0,NULL);
 if (!jt) error=-6;
 lgetSize(&len,&wid,jt);
 for (i=0;i<len*wid;i++) if (jt[4+i]==57) jt[4+i]=255;
 delete fback;
 return error;
}
#define FIGHT_ENEMY    0
#define FIGHT_ENEMY01  1
#define FIGHT_ACTOR    2
#define FIGHT_ACTOR01  3
#define FIGHT_MENU     4
#define FIGHT_BACKG    5
#define FIGHT_MAGIC01  6
#define FIGHT_MAGIC02  7
#define FIGHT_JIANTOU  8
void f_getname(int index,char *s)
{ switch (index)
   { case FIGHT_ENEMY: sprintf(s,"ixt\\enemy.ixt"); break;
     case FIGHT_ENEMY01: sprintf(s,"pic\\enemy01.lpc"); break;
     case FIGHT_ACTOR: sprintf(s,"pic\\actor.lpc"); break;
     case FIGHT_ACTOR01: sprintf(s,"pic\\actor01.lpc"); break;
     case FIGHT_MENU: sprintf(s,"pic\\menu.lpc"); break;
     case FIGHT_BACKG: sprintf(s,"pic\\back00.pcx"); break;
     case FIGHT_MAGIC01: sprintf(s,"ixt\\magic.ixt"); break;
     case FIGHT_JIANTOU: sprintf(s,"pic\\jiantou.pcx"); break;
   }
}
////////////////////////////////////////////////////////////////////////////
void scr_view(int dbf,int scr)
{ lActiveSurface(&ls);
  if (dbf>0) lBlitFast(&ls,0,0, 0,240,319,479,&ls,0);
  if (scr>0) lOutToScr(&ls,0,0, 0,0,319,239);
}
void Menu_Video()
{ int j_j;

 for (j_j=0;j_j<10;j_j++) {
            Noop(fight_delay*1);
            scr_view(1,-1);
            Fighter_View();
            lputImage(54,j_j+1,menu_p.LpcImage[0]);
            lputImage(300-(j_j*23),44,menu_p.LpcImage[2]);
            lputImage(54,((j_j*12)-186)*(-1),menu_p.LpcImage[4]);
            lputImage((j_j*2)-3,44,menu_p.LpcImage[6]);
            scr_view(-1,1);
 }
}

////////////////////////////////////////////////////////////////////////////

int Create_Enemy(int Enemy_No,int Create_mode)
{ int i,j,flag,temp[3],MaxEnemy,n,k,p;
  int Create_flag,min_hp,error;
  FILE *f1;
  char fname[80];
  flag=error=0;

 f_getname(FIGHT_ENEMY,fname);
 if ((f1=fopen(fname,"r"))==NULL) {
      error=-7;
      voc.regist_msg("The ENEMY.IXT Load Error 01  !!!");
      return error;
  }
    fscanf(f1,"%d",&MaxEnemy);

 if (Create_mode==0){
   for (n=0;n<3&&en[n].flag;n++);
   if (n==3) return -1;
   for (j=0;((j<=MaxEnemy)&(flag!=1));j++) {
     fscanf(f1,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",&en[3].id,&en[3].hp,&en[3].mp,&en[3].at,&en[3].df,&en[3].sm,&en[3].attrib,
           &en[3].mgc[0],&en[3].mgc[1],&en[3].mgc[2],&en[3].mgc[3],&en[3].mgc[4],&en[3].mgc[5],&en[3].mgc[6],en[3].say_mode);
        if (en[3].say_mode==1) fscanf(f1,"%s",en[3].say);
     if (Enemy_No==en[3].id) {
        flag=1;
        for (i=0;i<3;i++) temp[i]=0;
        for (i=0;i<3;i++) if (en[i].flag) temp[en[i].seat]=1;
        for (i=0;i<3;i++) if (!temp[i]) en[n].seat=i;
        en[n].flag=1;
        en[n].id=Enemy_No;
        en[n].hp=en[3].hp;
        en[n].seat=fd.enemy_x[n];
        en[n].attrib=en[3].attrib;
        en[n].mp=en[3].mp;
        en[n].at=en[3].at;
        en[n].df=en[3].df;
        en[n].sm=en[3].sm;
        en[n].say_mode=en[3].say_mode;
        strcpy(en[n].say,en[3].say);
        for (i=0;i<8;i++) en[n].mgc[i]=en[3].mgc[i];
        get_exp+=en[n].hp/8;
     }
   }
 }
 if (Create_mode==1) {
  for (n=0;n<3&&en[n].flag;n++);
   if (n==3) return -1;
   for (j=0;((j<=MaxEnemy)&(flag!=1));j++) {
     fscanf(f1,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",&en[3].id,&en[3].hp,&en[3].mp,&en[3].at,&en[3].df,&en[3].sm,&en[3].attrib,
           &en[3].mgc[0],&en[3].mgc[1],&en[3].mgc[2],&en[3].mgc[3],&en[3].mgc[4],&en[3].mgc[5],&en[3].mgc[6],en[3].say_mode);
        if (en[3].say_mode==1) fscanf(f1,"%s",en[3].say);
     if (Enemy_No==en[3].id) {
        flag=1;
        en[n].flag=1;
        en[n].id=Enemy_No;
        en[n].seat=fd.enemy_x[n];
        en[n].hp=en[3].hp;
        en[n].attrib=en[3].attrib;
        en[n].mp=en[3].mp;
        en[n].at=en[3].at;
        en[n].df=en[3].df;
        en[n].sm=en[3].sm;
        en[n].say_mode=en[3].say_mode;
        strcpy(en[n].say,en[3].say);
        for (i=0;i<8;i++) en[n].mgc[i]=en[3].mgc[i];
        get_exp+=en[n].hp/8;
     }
   }
 }
 fclose(f1);
 return 0;
}

////////////////////////////////////////////////////////////////////////////

int DataInit()
{ int l,k;
  FILE *mgf;
  char name[100];
  get_exp=0;
  mode_mf=2;
  menu=0;
  fe_x[0]=80;fe_x[1]=160;fe_x[2]=240;
  fa_x[0]=80;fa_x[1]=140;fa_x[2]=200;fa_x[3]=260;

  factor_num=fd.actor_num;
  fenemy_num=fd.enemy_num;

  fplace=fd.place;
  for (l=0;l<8;l++) factor[l]=-1;
  for (l=0;l<4;l++) en[l].flag=0,en[l].seat=-1;
  for (l=0;l<5;l++) ac[l].flag=0;
  for (l=0;l<9;l++) st[l].mode=-1,st[l].obj=-1,st[l].atf=0,st[l].source=0;
  for (l=0;l<fd.actor_num;l++) {
      voc.regist_msg("loop");
      ac[l].id=fd.actor[l];
      ac[l].flag=1;
      ac[l].mhp=fd.mhp[l];
      ac[l].mmp=fd.mmp[l];
      ac[l].hp=fd.hp[l];
      ac[l].mp=fd.mp[l];
      ac[l].at=fd.at[l];
      ac[l].df=fd.df[l];
      ac[l].sm=fd.sm[l];
      ac[l].exp=fd.exp[l];
      ac[l].lev=fd.lev[l];
      ac[l].mg_num=fd.mg_num[l];
      for(k=0;k<ac[l].mg_num;k++) ac[l].mgc[k]=fd.mgc[l][k];
  }
  Actor_pic[0][0]=0;
  Actor_pic[0][1]=0;
  Actor_pic[0][2]=1;
  Actor_pic[1][0]=0;
  f_getname(FIGHT_MAGIC01,name);
  if ((mgf=fopen(name,"r"))==NULL) {
     voc.regist_msg("Load Magic.Ixt Error 01 !!!");
     return -1;
  }
  for (l=0;l<20;l++) {
      fscanf(mgf,"%d %s %d %d %d",&mg[l].id,mg[l].name,&mg[l].mode,&mg[l].nmp,&mg[l].ahp_at);
  }
  for (l=0;l<fd.enemy_num;l++) Create_Enemy(fd.enemy[l],1);
  fclose(mgf);
  return 0;
}

////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -