作者laechan (小太保)
看板mud_sanc
标题[闲聊] 无聊 coding 一下
时间Thu Nov 17 11:46:00 2011
没办法上线 coding。
// Laechan@sanc add in 2011/11/17
// 房间继承用样本
#define AREA_MAP read_file(__DIR__+"area_map")
string query_location()
{
int i,j,k,s1,s2,n,ii,jj;
mixed area_maps,tmps=({});
string tmp;
n=(int)query("room_num"); // 读取房间号码, 如 "020" = 20
area_maps=explode(AREA_MAP,"\n");
s1=sizeof(area_maps);
for(i=0;i<s1;i++)
{
tmp=area_maps[i];
s2=strlen(tmp);
for(j=1;j<s2;j=j+2)
{
if(tmp[j-1..j]=="□")
{
k++;
if(k==n)
{
tmps=({i,j-1}); // 读到的第 20 个 □ 时的 i, j 位置
break;
}
}
}
}
i=tmps[0];
j=(tmps[1]+1)/2; // 把两格当成 1 格看
// 得到座标 i,j, 以及 s1, s2
// 现在,假设小地图 size = s1:s2 = 5:n
n=(s2*5)/s1; // 得到小地图宽度
i=1+(i*5)/s1;
j=1+(j*n)/s2;
// 这样就能得到 (i,j) 这个点在小地图的相对位置
tmp="你现在的位置:\n┌";
for(ii=0;ii<j;ii++)
tmp+="─";
tmp+="┐\n";
for(ii=1;ii<=5;ii++)
{
tmp+="│";
for(jj=1;jj<=n;jj++)
(ii==i && jj==j) ? tmp+=HIY"◎"NOR : tmp+=" ";
tmp+="│\n";
}
tmp+="└";
for(ii=0;ii<j;ii++)
tmp+="─";
tmp+="┘\n";
return tmp;
}
它的执行结果类似底下,假设该地图是 8x8 的地图,然後
你走到了该地图的右上角附近,根据换算结果..
8:8 = 5:n => n=8x5/8 = 5 , 所以变成 5x5 的小地图
你现在的位置:
1 2 3 4 5
┌─────┐
1│
◎│
2│ │
3│ │
4│ │
5│ │
└─────┘
这时再搭配 gps 指令,你就可以知道..
一、自己目前在这个区域的哪个位置
二、这个位置附近的路线配置如何(gps)
三、再搭配一个该区域专属的看地图指令(x-x-x 这种地图)
这样三个资讯相结合在一起,玩家就知道自己现在位於
区域的哪个方位,再透过 gps 知道附近的路线配置,然
後跟 x-x-x 这种图去对照一下,马上就知道自己的绝对
座标在哪,以及下一步甚至下 n 步要怎麽走。
不用去画什麽很复杂的图形啦。
不过实际上我不可能给如此透明的资讯,因为这只会对
挂机的人有利,传统的区域地图只要走过一遍,第二遍
起就可以用挂机的方法跑,以後这一点将会被改变。
LAechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 101.15.220.216 (11/17 11:49)
※ 编辑: laechan 来自: 101.15.220.216 (11/17 11:50)