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

📄 hb.h

📁 仙剑演示版源代码
💻 H
字号:
# define BYTE          unsigned char
# define WORD          unsigned int
# define closemode     CLOSEMODE
# define inkey         INKEY
# define setbank       SETBANK
# define sethimode     SETHIMODE
# define clrbank       CLRBANK
# define wbuf          WBUF
# define waitkey       WAITKEY
# define MOUSE         0x33
# define ARROWCOLOR    15
# define BACKCOLOR     135

extern   closemode();
extern   inkey();
extern   sethimode();
extern   setbank();
extern   clrbank();
extern   wbuf();
extern   waitkey();

# include <dos.h>

int CurBankA=0;
int CurBankB=0;
char bank;
int  offset;

/* The shape of the arrow */
BYTE arrow[20][20]=
         {0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
          0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
          0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*
BYTE arrow[20][20]=
         {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
          0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,
          0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
          0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
          0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
          0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,
          0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,
          0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,
          0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
          0,0,1,0,0,0,4,0,0,0,0,0,0,4,0,0,0,1,0,0,
          0,1,0,0,0,4,4,4,0,0,0,0,4,4,4,0,0,0,1,0,
          0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
          0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,
          0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,
          0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,
          0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,
          0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,
          0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
          0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
*/

void pset(int x,int y,BYTE color)
{
  bank=((long) y*640+(long)x)/65536;
  offset=(y*640+x)%65536;
  if (bank!=CurBankA)
  {
     setbank((int) bank,0);
     CurBankA=bank;
  }
  pokeb(0xa000,offset,color);
}

# if IBMVIDEOCARD
  BYTE point(int x,int y)
  {
    BYTE far * video=MK_FP(0xa000,0x0000);
    WORD bank;
    int offset;
    bank=((long) y*640+(long)x)/65536;
    offset=(y*640+x)%65536;
    if (bank!=CurBankB)
    {
       setbank(bank,1);
       CurBankB=bank;
    }
    return *(video+offset);
  }
# else
  BYTE point(int x,int y)
  {
    BYTE far * video=MK_FP(0xa000,0x0000);
    WORD bank;
    int offset;
    bank=((long) y*640+(long)x)/65536;
    offset=(y*640+x)%65536;
    if (bank!=CurBankA)
    {
       setbank(bank,0);
       CurBankA=bank;
    }
    return *(video+offset);
  }

# endif

void hline(int start_x,int end_x,int y,BYTE color)
{
  int dx;
  dx=end_x-start_x+1;
  bank=((long) y*640+(long)start_x)/65536;
  offset=(y*640+start_x)%65536;
  if (bank!=CurBankA)
  {
     setbank((int) bank,0);
     CurBankA=bank;
  }
  wbuf(offset,dx,color);
}
void vline(int start_y,int end_y,int x,BYTE color)
{
  int y;
  for (y=start_y;y<end_y+1;y++) pset(x,y,color);
}
void bar(int left,int top,int right,int bottom,BYTE color)
{
  hline(left,right,top,color);
  hline(left,right,bottom,color);
  vline(top,bottom,left,color);
  vline(top,bottom,right,color);
}
void fill(int left,int top,int right,int bottom,BYTE color)
{
  int x,y;
  for (y=top;y<bottom+1;y++)
      hline(left,right,y,color);
}
void drawarrow(int x,int y,BYTE color)
{
  int xx,yy;
  for (yy=0;yy<20;yy++)
     for (xx=0;xx<20;xx++)
        if (arrow[yy][xx]) pset(x+xx,y+yy,color);
}
void getimage(int x,int y,BYTE *buf)
{
  int xx,yy;
  for(yy=0;yy<20;yy++)
     for(xx=0;xx<20;xx++)
        *(buf++)=point(x+xx,y+yy);
}
void putimage(int x,int y,BYTE *buf)
{
  int xx,yy;
  for(yy=0;yy<20;yy++)
     for(xx=0;xx<20;xx++)
        pset(x+xx,y+yy,*(buf++));
}
int MouseState()
{
  union REGS regs;
  regs.x.ax = 3;
  int86(MOUSE, &regs, &regs);
  return(regs.x.bx);
}
void Set_Range(int start_x,int start_y,int end_x,int end_y)
{
  union REGS r;
  r.x.ax=7;
  r.x.cx=start_x;
  r.x.dx=end_x;
  int86(0x33,&r,&r);
  r.x.ax=8;
  r.x.cx=start_y;
  r.x.dx=end_y;
  int86(MOUSE,&r,&r);
}
void Mouse_Reset()
{
  union REGS regs;
  regs.x.ax = 0;
  int86(MOUSE, &regs, &regs);
  if (! regs.x.ax)
  {
     printf("Mousedriver not installed.");
     exit(0);
  }
  Set_Range(0,0,629,479);
}
void Get_XY(int *x,int *y)
{
  union REGS ireg,oreg;
  ireg.x.ax=3;
  int86(MOUSE,&ireg,&oreg);
  *x=oreg.x.cx;
  *y=oreg.x.dx;
}
void Set_XY(int x,int y)
{
  union REGS ireg;
  ireg.x.ax=4;
  ireg.x.cx=x;
  ireg.x.dx=y;
  int86(MOUSE,&ireg,&ireg);
}

BYTE font[96][7] = {
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* Space */
  { 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00 }, /* !  */
  { 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* "  */
  { 0x48, 0xFC, 0x48, 0x48, 0xFC, 0x48, 0x00 }, /* #  */
  { 0x40, 0x60, 0x80, 0x40, 0x20, 0xC0, 0x40 }, /* $  */
  { 0xC4, 0xC8, 0x10, 0x20, 0x4C, 0x8C, 0x00 }, /* %  */
  { 0x40, 0xA0, 0x40, 0xA4, 0x90, 0x64, 0x00 }, /* &  */
  { 0xC0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00 }, /* '  */
  { 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x00 }, /* (  */
  { 0x80, 0x40, 0x20, 0x20, 0x40, 0x80, 0x00 }, /* )  */
  { 0x00, 0x90, 0x60, 0xF0, 0x60, 0x90, 0x00 }, /* *  */
  { 0x00, 0x00, 0x40, 0xE0, 0x40, 0x00, 0x00 }, /* +  */
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80 }, /* ,  */
  { 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00 }, /* -  */
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 }, /* .  */
  { 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00 }, /* /  */
  { 0x60, 0x90, 0xB0, 0xD0, 0x90, 0x60, 0x00 }, /* 0  */
  { 0x40, 0xC0, 0x40, 0x40, 0x40, 0xE0, 0x00 }, /* 1  */
  { 0x60, 0x90, 0x10, 0x60, 0x80, 0xF0, 0x00 }, /* 2  */
  { 0xE0, 0x10, 0x60, 0x10, 0x10, 0xE0, 0x00 }, /* 3  */
  { 0x20, 0xA0, 0xA0, 0xF0, 0x20, 0x20, 0x00 }, /* 4  */
  { 0xF0, 0x80, 0xE0, 0x10, 0x10, 0xE0, 0x00 }, /* 5  */
  { 0x70, 0x80, 0xE0, 0x90, 0x90, 0x60, 0x00 }, /* 6  */
  { 0xF0, 0x10, 0x20, 0x40, 0x40, 0x40, 0x00 }, /* 7  */
  { 0x60, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00 }, /* 8  */
  { 0x60, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x00 }, /* 9  */
  { 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00 }, /* :  */
  { 0x00, 0x40, 0x00, 0x00, 0x40, 0x80, 0x00 }, /* ;  */
  { 0x00, 0x20, 0x40, 0x80, 0x40, 0x20, 0x00 }, /* <  */
  { 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00 }, /* =  */
  { 0x00, 0x80, 0x40, 0x20, 0x40, 0x80, 0x00 }, /* >  */
  { 0x60, 0x90, 0x10, 0x60, 0x00, 0x40, 0x00 }, /* ?  */
  { 0x70, 0x88, 0xB8, 0xB0, 0x84, 0x78, 0x00 }, /* @  */
  { 0x60, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x00 }, /* A  */
  { 0xE0, 0x90, 0xE0, 0x90, 0x90, 0xE0, 0x00 }, /* B  */
  { 0x60, 0x90, 0x80, 0x80, 0x90, 0x60, 0x00 }, /* C  */
  { 0xE0, 0x90, 0x90, 0x90, 0x90, 0xE0, 0x00 }, /* D  */
  { 0xF0, 0x80, 0xE0, 0x80, 0x80, 0xF0, 0x00 }, /* E  */
  { 0xF0, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x00 }, /* F  */
  { 0x60, 0x90, 0x80, 0xB0, 0x90, 0x60, 0x00 }, /* G  */
  { 0x90, 0x90, 0xF0, 0x90, 0x90, 0x90, 0x00 }, /* H  */
  { 0xE0, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00 }, /* I  */
  { 0x70, 0x20, 0x20, 0x20, 0xA0, 0x40, 0x00 }, /* J  */
  { 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x90, 0x00 }, /* K  */
  { 0x80, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00 }, /* L  */
  { 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x00 }, /* M  */
  { 0x90, 0xD0, 0xB0, 0x90, 0x90, 0x90, 0x00 }, /* N  */
  { 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00 }, /* O  */
  { 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x00 }, /* P  */
  { 0x70, 0x88, 0x88, 0x88, 0x90, 0x68, 0x00 }, /* Q  */
  { 0xE0, 0x90, 0x90, 0xE0, 0x90, 0x90, 0x00 }, /* R  */
  { 0x70, 0x80, 0x60, 0x10, 0x10, 0xE0, 0x00 }, /* S  */
  { 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, /* T  */
  { 0x90, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00 }, /* U  */
  { 0x88, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00 }, /* V  */
  { 0x88, 0x88, 0x88, 0xA8, 0xD8, 0x88, 0x00 }, /* W  */
  { 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00 }, /* X  */
  { 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00 }, /* Y  */
  { 0xF0, 0x10, 0x20, 0x40, 0x80, 0xF0, 0x00 }, /* Z  */
  { 0xE0, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00 }, /* [  */
  { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00 }, /*    */
  { 0xE0, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00 }, /* ]  */
  { 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^  */
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00 }, /* _  */
  { 0xC0, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00 }, /* `  */
  { 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x00 }, /* a  */
  { 0x80, 0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00 }, /* b  */
  { 0x00, 0x00, 0x70, 0x80, 0x80, 0x70, 0x00 }, /* c  */
  { 0x10, 0x10, 0x70, 0x90, 0x90, 0x70, 0x00 }, /* d  */
  { 0x00, 0x00, 0x70, 0xA0, 0xC0, 0x70, 0x00 }, /* e  */
  { 0x30, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00 }, /* f  */
  { 0x00, 0x00, 0x60, 0x90, 0x70, 0x10, 0xE0 }, /* g  */
  { 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x00 }, /* h  */
  { 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00 }, /* i  */
  { 0x00, 0x20, 0x00, 0x20, 0x20, 0x20, 0xC0 }, /* j  */
  { 0x80, 0x80, 0xA0, 0xC0, 0xA0, 0x90, 0x00 }, /* k  */
  { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00 }, /* l  */
  { 0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0x00 }, /* m  */
  { 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x00 }, /* n  */
  { 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00 }, /* o  */
  { 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80 }, /* p  */
  { 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10 }, /* q  */
  { 0x00, 0x00, 0x60, 0x80, 0x80, 0x80, 0x00 }, /* r  */
  { 0x00, 0x00, 0x70, 0xC0, 0x30, 0xE0, 0x00 }, /* s  */
  { 0x00, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00 }, /* t  */
  { 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x00 }, /* u  */
  { 0x00, 0x00, 0x88, 0x88, 0x50, 0x20, 0x00 }, /* v  */
  { 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0x58, 0x00 }, /* w  */
  { 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x00 }, /* x  */
  { 0x00, 0x00, 0x90, 0x90, 0x70, 0x10, 0xE0 }, /* y  */
  { 0x00, 0x00, 0xF0, 0x20, 0x40, 0xF0, 0x00 }, /* z  */
  { 0x10, 0x20, 0x20, 0xC0, 0x20, 0x20, 0x10 }, /* {  */
  { 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00 }, /* |  */
  { 0x80, 0x40, 0x40, 0x30, 0x40, 0x40, 0x80 }, /* }  */
  { 0x64, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ~  */
  { 0x45, 0x33, 0xa0, 0x01, 0x44, 0xa0, 0xc0 },
};

short font_width[96] = {
  3,2,4,7,4,7,6,3,4,4,5,4,3,4,2,7,  /*Space thru slash  */
  5,4,5,5,5,5,5,5,5,5, /* 0 thru 9   */
  2,3,4,4,4,5,7,  /* Colon through at (@)  */
  5,5,5,5,5,5,5,5,4,5,5,5,6,5,5,5,6,5,5,4,5,6,6,6,6,5, /* Cap. letters  */
  4,7,4,4,5,3,  /* Right square bracket [ thru open quote (`)   */
  5,5,5,5,5,5,5,5,2,4,5,2,6,5,5,5,5,4,5,4,5,6,6,5,5,5, /* Lowercase ltrs   */
  5,2,5,7  /* Left sqiggle, broken bar, right squiggle, tilde    */
};
void print(int x, int y, char letter,BYTE scale,BYTE col)
{
  static   int y_scan, width;
  static   BYTE mask;
  static   BYTE * fontptr;
  BYTE     sx,sy;
  register int x_scan;
  if(letter <= 31) return;
  letter -= 32;
  width = font_width[(int)letter];
  fontptr = font[(int)letter];
  for (y_scan = 0; y_scan != 7; y_scan++)
  {
      mask = 128;
      for (x_scan = 0; x_scan != width; x_scan++)
      {  
          if (*fontptr & mask)
             for (sy=0;sy<scale;sy++)
                 for (sx=0;sx<scale;sx++)
                     pset(x+x_scan*scale+sx,y+y_scan*scale+sy,col);
        mask >>= 1;
      }     
      ++fontptr;
  }
}
void text(int x, int y, char * str,BYTE scale,BYTE col)
{
  while(*str) {
    print(x, y, *str,scale,col);
    x+= font_width[*str-32]*scale;
    ++str;
  }
}

⌨️ 快捷键说明

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