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

📄 map.c

📁 仙剑演示版源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
     {
        MAP[Num].event=input(9);
     }
     /* input root pos */
     else if (nowx>230&&nowx<270&&nowy>170&&nowy<187)
     {
	offx=0;
	offy=0;
	root=input(29);
        diff=root-Num;
        while (diff>=0)
        {
          diff-=40;
          offx++;
        }
        diff+=40;
        offy=diff;
        offx-=offy;
        offx--;
        MAP[Num].offx=offx;
        MAP[Num].offy=offy;
     }
  }
}
void menu()
{
  int   button=0;

  Reach=MAP[Num].reach;
  Hide =MAP[Num].hide;
  Mode =MAP[Num].mode;

  xms2scr();
  fill(9,64,28,83,134);

  locate(1,9);
  printf("%d",MAP[Num].num);
  locate(1,29);
  printf("%d",Num);
  locate(22,9);
  printf("%d",MAP[Num].event);
  locate(22,29);
  printf("%d",MAP[Num].offx*40+MAP[Num].offy*41+Num);
  locate(18,29);
  printf("%d",MAP[Num].top);
  putpic(9,64+20*Hide,OP);
  putpic(169,64+20*Mode,OP);
  if (Reach) putpic(9,138,OP);
  readpat(MAP[Num].num,0);
  showsmall(126,30);

  show();
  key=ScanKey();
  while (key!=57)
  {
    key=ScanKey();
    button=MouseState();
    if (button) control(button);
    button=0;

    oldx=nowx;
    oldy=nowy;
    Get_XY(&nowx,&nowy);
    if ((oldx!=nowx)||(oldy!=nowy))
    {
       putpic(oldx,oldy,*buf);
       show();
    }
  }
  MAP[Num].reach=Reach;
  MAP[Num].mode=Mode;
  MAP[Num].hide=Hide;
  hide();
  show();
}
void selroot(int pos)
{
  int   x,y;
  int   xx,yy;
  int   index;
  int   root;
  int   diff;
  int   button=0;
  int   logicX,logicY;
  int   i,j,p=0;

  hide();
  for (yy=0;yy<4;yy++)
	  for (xx=0;xx<4;xx++)
	  {
              index=pos+xx*40+yy*41;
              if ((index<41)||(index>4048)) return;
              i=index/81;
              j=index%81;
              if ((j==40)||(j==80)) return;

              logicX=j*32+14;
              logicY=i*16-7;

              if (j>39)
              {
                 logicX-=1296;
                 logicY+=8;
			  }
			  logicX-=14;
			  logicX-=VIEW_X;
			  logicY-=VIEW_Y;
			  readpat(MAP[index].num,0);
              p=0;
              for (i=0;i<15;i++)
                  for (j=0;j<32-abs(i-7)*4;j++)
                  {
                      x=logicX+abs(i-7)*2+j;
                      y=logicY+i;
                      if (x>=0&&x<320&&y>=0&&y<200) pset(x,y,255-shape[p]);
                      p++;
                  }
          }
  show();

  key=ScanKey();
  button=0;
  while (key!=1&&!button)
  {
	button=0;
        key=ScanKey();
    button=MouseState();
    if (button)
    {
           root=calcnum(VIEW_X+nowx,VIEW_Y+nowy);
           offx=0;
           offy=0;
           diff=root-pos;
           while (diff>=0)
           {
             diff-=40;
             offx++;
           }
           diff+=40;
           offy=diff;
           offx-=offy;
           offx--;
           MAP[pos].offx=offx;
           MAP[pos].offy=offy;

    }

    oldx=nowx;
    oldy=nowy;
    Get_XY(&nowx,&nowy);
    if ((oldx!=nowx)||(oldy!=nowy))
    {
       putpic(oldx,oldy,*buf);
       show();
    }
  }
}
void main()
{
  int    tx,ty;
  int    tox,toy;
  int    i=4090;
  int    oldpat;
  int    oldh;
  int    CommonHide=0;
  int    CommonReach=0;
  int    CommonTop=0;
  int    blocknum=0;
  int    lastpat=0;
  BYTE   PUT=FALSE;
  struct ffblk f;

  findfirst("demo.dot",&f,FA_ARCH);
  MAX=f.ff_fsize/256-1;

  Mouse_Reset();
  xms_init();
  get_xmsentry();
  handle=alloc_xms(1024);
  menu_handle=alloc_xms(64);

  pat=fopen("demo.dot","rb");
  fp_map=fopen("game.map","rb+");
  fread(MAP,4090,6,fp_map);

  setmode();
  readpal();

  initmenu();

  Mouse_Reset();
  Set_XY(nowx,nowy);

  while (i--)
  {
    readpat(MAP[i].num,0);
    drawxms(i);
    drawtop(i);
  }

  refresh(0,0);

  key=ScanKey();
  while (key!=1)
  {
    lastpat=nowpat;
    switch (key)
    {
      case 75:
           VIEW_X-=10;
           if (VIEW_X<0) VIEW_X=0;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 77:
           VIEW_X+=10;
           if (VIEW_X>960) VIEW_X=960;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 72:
           VIEW_Y-=10;
           if (VIEW_Y<0) VIEW_Y=0;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 80:
           VIEW_Y+=10;
	   if (VIEW_Y>600) VIEW_Y=600;
           refresh(VIEW_X,VIEW_Y);
	   break;
      case 115:
           VIEW_X-=320;
           if (VIEW_X<0) VIEW_X=0;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 116:
           VIEW_X+=320;
           if (VIEW_X>960) VIEW_X=960;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 141:
           VIEW_Y-=200;
           if (VIEW_Y<0) VIEW_Y=0;
           refresh(VIEW_X,VIEW_Y);
           break;
      case 145:
           VIEW_Y+=200;
	   if (VIEW_Y>600) VIEW_Y=600;
           refresh(VIEW_X,VIEW_Y);
	   break;
      case 71:
           VIEW_Y=0;
           VIEW_X=0;
           refresh(VIEW_X,VIEW_Y);
	   break;
      case 79:
           VIEW_Y=600;
           VIEW_X=0;
           refresh(VIEW_X,VIEW_Y);
	   break;
      case 48:
	   nowpat--;
	   break;
      case 49:
	   nowpat++;
           break;
      case 28:
           savemap();
	   break;
      case 46:
	   COMMON=!COMMON;
	   refresh(VIEW_X,VIEW_Y);
	   break;
      case 47:
	   CONT=!CONT;
	   refresh(VIEW_X,VIEW_Y);
	   break;
      case 83:
	   TOP=!TOP;
	   refresh(VIEW_X,VIEW_Y);
	   break;
	  case 19:
	   selroot(calcnum(VIEW_X+nowx,VIEW_Y+nowy));
           refresh(VIEW_X,VIEW_Y);
           break;
	  case 57:
	   tx=nowx;
	   ty=nowy;
	   tox=oldx;
	   toy=oldy;
	   Num=calcnum(VIEW_X+nowx,VIEW_Y+nowy);
	   menu();
	   drawtop(Num);
	   drawxms(Num);
	   Set_XY(tx,ty);
	   nowx=tx;
	   nowy=ty;
	   oldx=tox;
	   oldy=toy;
           readpat(nowpat,0);
	   showsmall(288,184);
	   refresh(VIEW_X,VIEW_Y);
    }
    key=ScanKey();

    if (nowpat>MAX) nowpat=0;
    if (nowpat<0) nowpat=MAX;
    if (nowpat!=lastpat)
    {
       readpat(nowpat,0);
       showsmall(288,184);
    }
    lastpat=nowpat;
    oldx=nowx;
    oldy=nowy;
    Get_XY(&nowx,&nowy);
    if ((oldx!=nowx)||(oldy!=nowy))
    {
       putpic(oldx,oldy,*buf);
       show();
    }
    button=MouseState();
    if (button==1&&!CONT)
    {
       blocknum=calcnum(VIEW_X+nowx,VIEW_Y+nowy);
       if (!TOP)
       {
	  oldpat=MAP[blocknum].num;
	  oldh=MAP[blocknum].hide;
          MAP[blocknum].num=nowpat;
          readpat(nowpat,0);
	  drawxms(blocknum);
	  readpat(MAP[blocknum].top,1);
	  drawtop(blocknum);
          refresh(VIEW_X,VIEW_Y);
          button=MouseState();
          while (button)
          {
            button=MouseState();
            if (button==3) PUT=TRUE;
            Set_XY(nowx,nowy);
          }
          if (!PUT)
          {
             MAP[blocknum].num=oldpat;
	     MAP[blocknum].hide=oldh;
	     readpat(oldpat,0);
             drawxms(blocknum);
	     readpat(MAP[blocknum].top,1);
	     drawtop(blocknum);
             readpat(nowpat,0);
             refresh(VIEW_X,VIEW_Y);
          }
          else
          {
             if (COMMON)
             {
                MAP[blocknum].hide=CommonHide;
                MAP[blocknum].reach=CommonReach;
                MAP[blocknum].top=CommonTop;
             }
          }
          PUT=FALSE;
       }
       else
       {
          oldpat=MAP[blocknum].top;
	  oldh=MAP[blocknum].hide;

	  MAP[blocknum].top=nowpat;
	  MAP[blocknum].hide=1;

	  readpat(MAP[blocknum].num,0);
	  readpat(MAP[blocknum].top,1);

	  drawxms(blocknum);
	  drawtop(blocknum);
          refresh(VIEW_X,VIEW_Y);

	  button=MouseState();
          while (button)
          {
            button=MouseState();
            if (button==3) PUT=TRUE;
            Set_XY(nowx,nowy);
          }
          if (!PUT)
          {
             MAP[blocknum].top=oldpat;
	     MAP[blocknum].hide=oldh;
	     readpat(MAP[blocknum].num,0);
	     readpat(oldpat,1);
	     drawxms(blocknum);
	     drawtop(blocknum);
             readpat(nowpat,0);
             refresh(VIEW_X,VIEW_Y);
          }
          PUT=FALSE;
       }
    }
    else if (button==1&&CONT)
    {
       blocknum=calcnum(VIEW_X+nowx,VIEW_Y+nowy);
       if (!TOP)
       {
          if (MAP[blocknum].num!=nowpat||MAP[blocknum].hide!=CommonHide||MAP[blocknum].reach!=CommonReach||MAP[blocknum].top!=CommonTop)
          {
             MAP[blocknum].num=nowpat;
             if (COMMON)
             {
                MAP[blocknum].hide=CommonHide;
                MAP[blocknum].reach=CommonReach;
                MAP[blocknum].top=CommonTop;
	     }
             readpat(MAP[blocknum].num,0);
	     readpat(MAP[blocknum].top,1);
	     drawxms(blocknum);
             drawtop(blocknum);
             refresh(VIEW_X,VIEW_Y);
          }
       }
       else
       {
	  if (MAP[blocknum].top!=nowpat||MAP[blocknum].hide!=1)
          {
             MAP[blocknum].top=nowpat;
	     MAP[blocknum].hide=1;
	     readpat(MAP[blocknum].num,0);
	     readpat(MAP[blocknum].top,1);
	     drawxms(blocknum);
	     drawtop(blocknum);
             refresh(VIEW_X,VIEW_Y);
          }
       }
    }
    else if (button==2)
    {
      blocknum=calcnum(VIEW_X+nowx,VIEW_Y+nowy);
      if (!TOP)
      {
         nowpat=MAP[blocknum].num;
         CommonHide=MAP[blocknum].hide;
         CommonReach=MAP[blocknum].reach;
         CommonTop=MAP[blocknum].top;
      }
      else
         nowpat=MAP[blocknum].top;
    }
    if (lastpat!=nowpat)
    {
       readpat(nowpat,0);
       lastpat=nowpat;
       showsmall(288,184);
    }
  }
  closemode();
  free_xmsblock(handle);
  free_xmsblock(menu_handle);
  fclose(fp_map);
  fclose(pat);
}

⌨️ 快捷键说明

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