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

📄 game.cpp

📁 轩辕2源代码.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  game_blit(-1,1);
  while (game_key(0)||game_key(1)) world.noop(0);
  while (lkpressed()) lkgetch(0);
  return 0;
}
int TEXPRESS::menu_choice(int max,char *argv[],int dark,int actor_face,int color,int startx,int starty)
{ short i,j,k,ok,start,index;
  short boxx=20, boxy=starty;
  short len,wid,pic,g,count=7;
  short ylist[16],l;
  short inst_win[4]={ 0,10+starty+5*34, 320,240 };
  int   step=100;
  char  line[80],*p;

  layer.active(0);
  if (dark) for (j=0;j<240;j++) for (i=0;i<320;i++)
    lpixel(i,j,color_map.data[240][lrpixel(i,j)]);
  put_box(startx,starty,5,5);
  if (actor_face>=0) put_status(actor_face,boxx,boxy);
  for (i=0;i<12;i++) ylist[i]=starty+24+i*20;
  scr_save();
  while (game_key(0)||game_key(1));
  while (lkpressed()) lkgetch(0);
  for (index=0,ok=0,start=0;ok==0;)
   {  scr_restore();
      for (i=0;i<count&&start+i<max;i++)
       {  p=argv[start+i];
          if (p) {
             lsetColor(color);
             express.outtextxy(startx+20,ylist[i],p,0);
          }
       }
      put_selector(startx+5*17,ylist[index]-1,5*34-10);
      sprintf(line,"金%6d",LGAME.money);
      lsetColor(c_dark);
      express.put_button(217,2,line);
      game_blit(-1,1);
      while (!lkpressed()) world.noop(game_delay);
      lkgetch(&k);
      switch (k)
       { case KEY_UP:    if (--index<0) index=0,start--;
                         if (start<0) start=0;
                         break;
         case KEY_DOWN:  if (start+index<max-1)
                            if (++index>=count) index=count-1,start++;
                         if (start>max-count) start=max-count;
                         if (start<0) start=0; break;
         case KEY_PGUP:  start-=count; if (start<0) start=0; break;
         case KEY_PGDN:  start+=count; if (start>max-count) start=max-count;
                         if (start<0) start=0; break;
         case KEY_ALT:   case KEY_ESC: ok=-1; break;
         case KEY_SPACE: case KEY_ENTER: case KEY_CTRL:
                         ok=1;
                         break;
       }
   }
  if (ok==-1) return -1;
  return start+index;
}
int TEXPRESS::actor_choice()
{ short len,wid,xx[4],my_id;
  short ac[3],i,j,ok,count,k;
  short x,y,my_x,my_y=180;
  static char save[320*240+10];
  lgetSize(&len,&wid,syspic.LpcImage[20]);
  xx[1]=160-len/2;
  xx[0]=160-80-len/2;
  xx[2]=160+80-len/2;
  for (i=0;i<3;i++) ac[i]=-1;
  for (i=0,j=0,count=0;i<3;i++) {
     k=game_findactor(i);
     if (k>=0) ac[j++]=i,count++;
  }
  while (game_key(0)||game_key(1)) world.noop(game_delay);
  while (lkpressed()) lkgetch(0);
  if (count==0) return -1;
  layer.active(0);
  lgetBlock(0,0,319,239,save);
  for (j=0,ok=0;ok==0;)
   { lputBlock(0,0,save);
     for (i=0;i<count;i++)
      {  my_x=xx[ac[i]]; my_id=ac[i];
         put_status(my_id,my_x,my_y);
         if (i!=j) {
            for (y=0;y<wid;y++) for (x=0;x<len;x++)
              lpixel(x+my_x,y+my_y,color_map.data[240][lrpixel(x+my_x,y+my_y)]);
         }
      }
     game_blit(-1,1);
     while (!lkpressed()) world.noop(game_delay);
     lkgetch(&k);
     switch (k)
      { case KEY_LEFT:  if (--j<0) j=0; break;
        case KEY_RIGHT: if (++j>=count) j=count-1; break;
        case KEY_ALT:   case KEY_ESC: ok=-1; break;
        case KEY_ENTER: case KEY_SPACE: case KEY_CTRL: ok=1; break;
      }
   }
  if (ok==-1) return -1;
  return j;
}
int TEXPRESS::goods_choice(int _movie,int mode)
{ short i,j,k,ok,start,index;
  short startx=128,starty=18;
  short boxx=20, boxy=starty;
  short len,wid,pic,g,count=7;
  short ylist[16],l;
  short inst_win[4]={ 0,10+starty+5*34, 320,240 };
  int   step=100;
  char  line[80];
  char  text1[40];
  char  text2[40];

  layer.active(0);
  if (_movie) {
     for (j=0;j<240;j++) for (i=0;i<320;i++)
       lpixel(i,j,color_map.data[240][lrpixel(i,j)]);
     scr_save();
     for (i=200,k=0;k==0;)
       {  world.noop(game_delay);
          scr_restore();
          layer.active(0);
          i-=32; if (i<0) i=0,k=1;
          put_box(startx+i,starty,5,5);
          game_blit(-1,1);
       }
  }
  put_box(startx,starty,5,5);
  lputBlock(boxx,boxy,syspic.LpcImage[19]);
  for (i=0;i<12;i++) ylist[i]=starty+24+i*20;
  scr_save();
  while (game_key(0)||game_key(1));
  while (lkpressed()) lkgetch(0);
  for (index=0,ok=0,start=0;ok==0;)
   {  g=LGAME.goods[start+index];
      scr_restore();
      lgetSize(&len,&wid,syspic.LpcImage[19]);
      if (g>=0) {
         pic=goods_dat[g].pic;
         lputImage(boxx+len/2-24,boxy+wid/2-23,syspic.LpcImage[goods+pic]);
      }
      for (i=0;i<count;i++)
       {  g=LGAME.goods[start+i];
          if (g>=0) {
             lsetColor(c_dark);   text1[0]=0;
             louttextxy(startx+20,ylist[i],goods_dat[g].name);
             lsetColor(c_white);
             louttextxy(inst_win[0],inst_win[1]-10,"说明:");
             if (goods_dat[g].mode>=0||goods_dat[g].mode<=3)
                sprintf(text1,"%3d%4d",goods_dat[g].ahp,goods_dat[g].dmp);
             lsetColor(c_blue);
             if (mode==1)  louttextxy(startx+20+80,ylist[i],text1);
             lsetColor(c_white);
             if (i==index) louttext(inst_win,goods_dat[g].inst);
          }  else {
             lsetColor(c_dark);
             louttextxy(startx+20,ylist[i],"无");
          }
       }
      put_selector(startx+5*17,ylist[index]-1,5*34-10);
      game_blit(-1,1);
      while (!lkpressed()) world.noop(game_delay);
      lkgetch(&k);
      switch (k)
       { case KEY_UP:    if (--index<0) index=0,start--;
                         if (start<0) start=0;
                         break;
         case KEY_DOWN:  if (index+start<MAX_GOODS-1)
                            if (++index>=count) index=count-1,start++;
                         if (start>MAX_GOODS-count) start=MAX_GOODS-count;
                         if (start<0) start=0; break;
         case KEY_PGUP:  start-=count; if (start<0) start=0; break;
         case KEY_PGDN:  start+=count; if (start>MAX_GOODS-count) start=MAX_GOODS-count;
                         if (start<0) start=0; break;
         case KEY_ALT:   case KEY_ESC: ok=-1; break;
         case KEY_SPACE: case KEY_ENTER: case KEY_CTRL:
                         if (mode==0) { ok=1; break; }
                         g=LGAME.goods[start+index]; if (g<0) break;
                         if (goods_dat[g].mode==3||goods_dat[g].mode==4)
                          { out_say(5,0,"现在还无法使用");
                            while (game_key(0)||game_key(1));
                            while (lkpressed()) lkgetch(NULL);
                            break;
                          }
                         l=actor_choice(); if (l<0) break;
                         if (yes_no()) LGAME.goods_use(start+index,l);
                         break;
       }
   }
  if (ok==-1) return -1;
  return start+index;
}
int TEXPRESS::movie(int m)
{ int i,j,k;

  scr_save();
  switch (m)
   { case 0: for (i=200,j=20,k=0;k==0;)
              {  world.noop(game_delay);
                 scr_restore();
                 layer.active(0);
                 i-=j; if (i<0) i=0, k=1;
                 put_button(80,80,i,-1);
                 game_blit(-1,1);
              }
             break;
     case 1: for (i=200,k=0;k==0;)
              {  world.noop(game_delay);
                 scr_restore();
                 layer.active(0);
                 i-=32; if (i<0) i=0,k=1;
                 put_box(main_bx+i,main_by,4,5);
                 game_blit(-1,1);
              }
             break;
     case 2: for (i=0,j=13;i<45;i+=4)
              {  world.noop(game_delay);
                 scr_restore();
                 layer.active(0);
                 lsetColor(j--);
                 put_rectangle(main_bx+15,main_by+15,main_bx+34*4-1-15,main_by+34*5-1-15,i);
                 game_blit(-1,1);
                 if (j<0) j=0;
              }
             put_box(main_bx,main_by,4,5);
             game_blit(-1,1);
             break;
   }
  return 0;
}
int TEXPRESS::put_selector(int mx,int my,int len)
{ int i,width=(len/2)/20;

  lputImage(mx-len/2,my-10+1,syspic.LpcImage[9]);
  lputImage(mx+len/2-20,my-10+1,syspic.LpcImage[11]);
  for (i=0;i<width;i++)
   {  lputImage(mx-i*20-20,my-10+1,syspic.LpcImage[10]);
      lputImage(mx+i*20,my-10+1,syspic.LpcImage[10]);
   }
  return 0;
}
int TEXPRESS::put_rectangle(int x1,int y1,int x2,int y2,int step)
{ int left,top,right,bottom,dy,dx;
  int mx=(x1+x2)/2+1, my=(y1+y2)/2+1;
  int len=x2-x1+1, wid=y2-y1+1, div_num=7;
  dy=wid/div_num;  dx=len*2/div_num;
  left=mx-dx-step/2;  right=mx+dx+step/2;
  top =my+dy-step*2;  bottom=my-dy+step*2;
  if (left<x1)   left=x1;
  if (right>x2)  right=x2;
  if (top<y1)    top=y1;
  if (bottom>y2) bottom=y2;
  lrectangle(left,top,right,bottom);
  return 0;
}
int TEXPRESS::put_button(int x,int y,int step,int choice)
{ int i,down[4],t[4];
  for (i=0;i<4;i++) down[i]=0,t[i]=0;
  if (choice>0&&choice<=4)  down[choice-1]=3,t[choice-1]=4;
  if (choice>=-4&&choice<0) t[-1-choice]=4;
  lputSpirit(x,y-32-step+down[0],syspic.LpcImage[button+0+t[0]]);
  lputSpirit(x,y+32+step+down[1],syspic.LpcImage[button+3+t[1]]);
  lputSpirit(x-40-step,y+down[2],syspic.LpcImage[button+1+t[2]]);
  lputSpirit(x+40+step,y+down[3],syspic.LpcImage[button+2+t[3]]);
  return 0;
}
int TEXPRESS::put_button(int x,int y,char *line)
{ short len,wid,sl=strlen(line)*8;
  lgetSize(&len,&wid,syspic.LpcImage[12]);
  lputImage(x,y,syspic.LpcImage[12]);
  louttextxy(x+len/2-sl/2+1,y+16,line);
  return 0;
}
int TEXPRESS::put_status(int actor_id,int x,int y)
{ int lhp,lmp,i=actor_id;
  int chp=c_green, cmp=c_blue;
  if (actor_id<0||actor_id>2) return -1;
  lputImage(x,y,syspic.LpcImage[20+actor_id]);
  if (LGAME.ac[i].hp<0) LGAME.ac[i].hp=0;
  if (LGAME.ac[i].mp<0) LGAME.ac[i].mp=0;
  if (LGAME.ac[i].hp>LGAME.ac[i].mhp) LGAME.ac[i].hp=LGAME.ac[i].mhp;
  if (LGAME.ac[i].mp>LGAME.ac[i].mmp) LGAME.ac[i].mp=LGAME.ac[i].mmp;
  lhp=44*LGAME.ac[i].hp/LGAME.ac[i].mhp;
  lmp=44*LGAME.ac[i].mp/LGAME.ac[i].mmp;
  if (lhp<22) chp=c_red;
  if (LGAME.ac[i].hp>0) {
     lsetColor(chp);
     lbar(x+1,y+1+44-lhp,x+2,y+44);
  }
  if (LGAME.ac[i].mp>0) {
     lsetColor(cmp);
     lbar(x+43,y+1+44-lmp,x+44,y+44);
  }
  return 0;
}
int TEXPRESS::put_box(int x,int y,int len,int wid)
{ int i,j,plen=34,m=len-2,n=wid-2;
  if (m<0||n<0) return -1;
  lputBlock(x,y,syspic.LpcImage[0]);
  lputBlock(x+(len-1)*plen,y,syspic.LpcImage[2]);
  lputBlock(x,y+(wid-1)*plen,syspic.LpcImage[6]);
  lputBlock(x+(len-1)*plen,y+(wid-1)*plen,syspic.LpcImage[8]);
  for (i=0;i<m;i++)
   {  lputBlock(x+(i+1)*plen,y,syspic.LpcImage[1]);
      lputBlock(x+(i+1)*plen,y+(wid-1)*plen,syspic.LpcImage[7]);
   }
  for (j=0;j<n;j++)
   {  lputBlock(x,y+(j+1)*plen,syspic.LpcImage[3]);
      lputBlock(x+(len-1)*plen,y+(j+1)*plen,syspic.LpcImage[5]);
   }
  for (j=0;j<n;j++) for (i=0;i<m;i++)
    lputBlock(x+(i+1)*plen,y+(j+1)*plen,syspic.LpcImage[4]);
  return 0;
}

⌨️ 快捷键说明

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