📄 map.c
字号:
{
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 + -