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

📄 game.cpp

📁 轩辕2源代码.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  for (i=0;i<7;i++) louttextxy(tx[i],ty[i],text[i]);
  express.scr_save();
  game_blit(-1,1);
  while (game_key(0));
  while (lkpressed()) lkgetch(0);
  for (i=0,ok=0,draw=1;ok==0;)
   {  if (draw) {
         express.scr_restore();
         lputSpirit(tx[i]+8,ty[i]+24,express.syspic.LpcImage[17]);
         game_getfname(NAME_SAVE,i,name);
         place[0]=0; maxlevel=0;
         if ((f=fopen(name,"rb")))
           { fseek(f,8,SEEK_SET);
             fread(&maxlevel,4,1,f);
             fread(place,1,80,f);
             fclose(f);
             exist=1;
           } else exist=0;
         louttextxy(tx[8],ty[8],place);
         sprintf(place,"%d",maxlevel);
         louttextxy(tx[7],ty[7],place);
         game_blit(-1,1);
         draw=0;
      }
      while (!lkpressed()) world.noop(game_delay);
      lkgetch(&k);
      switch (k)
       { case KEY_LEFT:  if (--i<0) i=0;   draw=1; break;
         case KEY_RIGHT: if (++i>=5) i=4;  draw=1; break;
         case KEY_ESC:
         case KEY_ALT:   ok=-1;  break;
         case KEY_SPACE:
         case KEY_ENTER:
         case KEY_CTRL:  ok=1;
                         if (save==0&&exist==0) ok=0;
                         break;
       }
   }
  while (game_key(0)||game_key(1)) world.noop(game_delay);
  if (ok<0) return -1;
  if (!mode) return i;
  if (save) world.SAVE_GAME(i);
     else world.LOAD_GAME(i);
  return 0;
}
int GAME::GameStatusView()
{ static char text[20][40];
  char  *ptext[20],i;
  int   add_at=0,add_df=0,actor_id;
  actor_id=express.actor_choice();
  if (actor_id<0) return 0;
  sprintf(text[0],"*%s",ac[actor_id].name);
  sprintf(text[1],"");
  sprintf(text[2],"*等级程度:$%d",ac[actor_id].level);
  sprintf(text[3],"*经验数值:$%d/%d",ac[actor_id].exp,exps[ac[actor_id].level+1]);
  sprintf(text[4],"*生命值:$%d/%d",ac[actor_id].hp,ac[actor_id].mhp);
  sprintf(text[5],"*魔法值:$%d/%d",ac[actor_id].mp,ac[actor_id].mmp);
  if (ac[actor_id].cloth>=0) {
     add_at+=express.goods_dat[ac[actor_id].cloth].ahp;
     add_df+=express.goods_dat[ac[actor_id].cloth].dmp;
  }
  if (ac[actor_id].weapon>=0) {
     add_at+=express.goods_dat[ac[actor_id].weapon].ahp;
     add_df+=express.goods_dat[ac[actor_id].weapon].dmp;
  }
  sprintf(text[6],"*攻  击:$%d*+~%d",ac[actor_id].at,add_at);
  sprintf(text[7],"*防  御:$%d*+~%d",ac[actor_id].df,add_df);
  sprintf(text[8],"*敏捷度:$%d",ac[actor_id].smt);
  strcpy(text[15],"无"); if (ac[actor_id].cloth>=0)  strcpy(text[15],express.goods_dat[ac[actor_id].cloth].name);
  strcpy(text[16],"无"); if (ac[actor_id].weapon>=0) strcpy(text[16],express.goods_dat[ac[actor_id].weapon].name);
  sprintf(text[9],"*身  穿:$%s",text[15]);
  sprintf(text[10],"*手  持:$%s",text[16]);
  for (i=0;i<16;i++) ptext[i]=text[i];
  express.menu_choice(11,ptext,1,actor_id,c_green);
  return 0;
}
int random1(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 GAME::FightStart(int enemy)
{ int aci[8],ac_count;
  int i,j,k,t,x,levelup=0;
  int save_music=voc.music;
  int result,r,g,b;
  char line[2048];
  FIGHT_DAT fight;
  static char bitmap[320*240+8];
  static char dark[320*240+8];
  static char save[320*240+8];
  RGB black_white[256];
  extern char *text_game_over[];
  extern int   fade_view(int,int,char*);

  exps[99]=0xfffff;
  for (i=0;i<4;i++) aci[i]=-1;
  for (i=0,j=0,ac_count=0;i<3;i++) {
      k=game_findactor(i);
      if (k>=0) aci[j++]=i, ac_count++;
  }
  for (i=0;i<8;i++) {
    fight.actor[i]=-1;
    fight.enemy[i]=-1;
    fight.mhp[i]=-1; fight.mmp[i]=-1; fight.at[i]=-1;
    fight.df[i]=-1;  fight.sm[i]=-1;  fight.hp[i]=-1;
    fight.mp[i]=-1;  fight.exp[i]=-1; fight.lev[i]=-1;
  }
  for(i=0;i<3;i++) fight.enemy_x[i]=-1;
  fight.actor_num=ac_count;

  for (i=0;i<ac_count;i++) {
      t=aci[i];
      fight.actor[i]=t;
      fight.mhp[i]=ac[t].mhp;
      fight.mmp[i]=ac[t].mmp;
      fight.hp[i]=ac[t].hp;
      fight.mp[i]=ac[t].mp;
      fight.sm[i]=ac[t].smt;
      fight.exp[i]=ac[t].exp;
      fight.lev[i]=ac[t].level;
      fight.at[i]=ac[t].at;
      fight.df[i]=ac[t].df;
      fight.mg_num[i]=0;
      if (ac[t].weapon>=0) {
         fight.at[i]+=express.goods_dat[ac[t].weapon].ahp;
         fight.df[i]+=express.goods_dat[ac[t].weapon].dmp;
      }
      if (LGAME.ac[t].cloth>=0) {
         fight.at[i]+=express.goods_dat[ac[t].cloth].ahp;
         fight.df[i]+=express.goods_dat[ac[t].cloth].dmp;
      }
  }
  fight.music=14;
  fight.place=0;
  fight.money=0;
  if (enemy>=0) {
     fight.enemy_num=1;
     fight.enemy[0]=enemy;
  }  else {
     if (world.data[1][700]==0) return 0;
     k=random1(world.data[1][700])+1; j=k;
     if (j>3) j=random1(3)+1;
     for (i=0;i<j;i++) fight.enemy[i]=world.data[1][701+random1(k)];
     fight.enemy_num=j;
  }
  switch (fight.enemy_num)
   { case 1: fight.enemy_x[0]=1; break;
     case 2: fight.enemy_x[0]=0; fight.enemy_x[1]=2; break;
     case 3: fight.enemy_x[0]=1; fight.enemy_x[1]=0;
             fight.enemy_x[2]=2; break;
   }
  lActiveSurface(NULL);
  lgetBlock(0,0,319,239,save);
  // --------> fight todo
  layer.active(0);
  lgetBlock(0,0,319,239,bitmap);
  lsetColor(240);
  lbar(0,0,319,239);
  lgetBlock(0,0,319,239,dark);
  for (i=0,j=2;i<360;i+=j,j++) {
    world.noop(game_delay);
    memset(layer.layers[0].memory,0,320*240);
    if (i<320) lputBlock(i,0,bitmap);
    if (i<320) lgPutMapImage(-i,0,bitmap,&color_map);
    if (i<320) lgPutMapImage(320-i,0,dark,&color_map);
    game_blit(-1,1);
  }
  while (game_key(0)||game_key(1));
  while (lkpressed()) lkgetch(NULL);
  result=start_fight(&fight);
  if (result!=1) {
     voc.playmidi(15,0);
     lloadPal(black_white);
     lloadPal(pal);
     for (i=0;i<256;i++) {
         r=black_white[i].r;
         g=black_white[i].g;
         b=black_white[i].b;
         j=(r*30+g*59+b*11)/100;
         black_white[i].r=j;
         black_white[i].g=j;
         black_white[i].b=j;
     }
     world.noop(game_delay*90);
     lActiveSurface(NULL);
     lgetBlock(0,0,319,239,bitmap);
     layer.active(0);
     for (i=0,k=0;k<63;k++)
      { world.noop(game_delay);
        memset(layer.layers[0].memory,0,320*240);
        lgPutImage(0,0,319-(320*i/100),239-(240*i/100),bitmap);
        lchgPal(1,pal,black_white);
        lsetPal(pal);
        game_blit(-1,1);
        if (i<50) i++;
      }
     lActiveSurface(NULL);
     for (i=0;i<5;i++) {
         fade_view(170,8+i*24,text_game_over[i]);
         world.noop(game_delay*60);
     }
     memset(layer.layers[0].memory,0,320*240);
     world.noop(game_delay*30*2);
     memset(pal,0,768);
     lsetPal(pal);
     layer.active(0);
     world.looping=2;
     return FALSE;
  }
  LGAME.money+=fight.money;
  for (i=0;i<ac_count;i++) {
      t=aci[i];
      ac[t].exp=fight.exp[i];
      ac[t].hp=fight.hp[i];
      ac[t].mp=fight.mp[i];
      j=GetLevel(fight.exp[i])-ac[t].level;
      ac[t].level=GetLevel(fight.exp[i]);
      if (j>0) {
         for (x=0;x<j;x++) {
           ac[t].mhp=ac[t].mhp*12/10+4;
           ac[t].mmp=ac[t].mmp*12/10+4;
           ac[t].at=ac[t].at*14/10+1;
           ac[t].df=ac[t].df*12/10+1;
           ac[t].smt=ac[t].smt*12/10+1;
         }
         ac[t].hp=ac[t].mhp;
         ac[t].mp=ac[t].mmp;
         levelup++;
      }
  }
  sprintf(line,"水平升级 %d点",levelup);
  if (levelup>0) express.out_say(6,0,line);
  // ------> todo
  voc.playmidi(save_music,1);
  lActiveSurface(NULL);
  lputBlock(0,0,dark);
  laddPal(-64,pal0,pal);
  lsetPal(pal);
  lputBlock(0,0,save);
  layer.active(0);
  for (i=-63;i<=0;i++) {
    world.noop(game_delay/2);
    laddPal(i,pal0,pal);
    lsetPal(pal);
  }
  lputBlock(0,0,save);
  lsetPal(pal0);
  return TRUE;
}
///////////////////////////////////////////////////////////////////////////
int TEXPRESS::buy_sell(short *things,int sell)
{ int i,j,count,ok;
  static char names[100][400];
  static char scr[320*240+100];
  char money[200],*p[100];
  short x=24,y=130,k;

  layer.active(0);
  lgetBlock(0,0,319,239,scr);
  while (game_key(0)||game_key(1)) world.noop(0);
  while (lkpressed()) lkgetch(0);
  for (i=0,count=0;things[i]>=0;i++,count++)
    { p[i]=names[i];
      sprintf(names[i],"*%s              ",goods_dat[things[i]].name);
      sprintf(money,"%d",goods_dat[things[i]].buy);
      for (j=0;j<6;j++) names[i][13+j]=money[j];
      names[i][12]='$';
    }
  for (ok=0;ok==0;)
   {  i=menu_choice(count,p,0,-1,0,75,36);
      if (i<0) ok=1;
      else if (i<count) {
        k=things[i];
        out_say(6,0,goods_dat[k].inst);
        if (yes_no()) {
          if (LGAME.money<goods_dat[k].buy)
             out_say(6,0,"你的钱不够");
           else {
              LGAME.money-=goods_dat[k].buy;
              LGAME.goods_add(k,1);
          }
        }
      } else voc.regist_msg("ERROR BUY");
   }
  layer.active(0);
  lputBlock(0,0,scr);
  game_blit(-1,1);
  while (game_key(0)||game_key(1)) world.noop(0);
  while (lkpressed()) lkgetch(0);
  if (!sell) return 0;
  out_say(6,0,"要卖东西吗?");
  if (!yes_no()) return 0;
  lputBlock(0,0,scr);
  game_blit(-1,1);
  for (ok=0;ok==0;)
   {  i=goods_choice(0,0);
      k=LGAME.goods[i];
      if (i>=0&&k>=0)
       { j=goods_dat[k].sell;
         if (j>0) {
           sprintf(money,"%s能卖 %d文钱",goods_dat[k].name,goods_dat[k].sell);
           out_say(6,0,money);
           if (yes_no())
            { LGAME.goods_add(k,0);
              LGAME.money+=goods_dat[k].sell;
            }
         }  else out_say(6,0,"此物不可卖");
       } else ok=1;
   }
  lputBlock(0,0,scr);

⌨️ 快捷键说明

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