[閒聊] 無聊 coding 一下
沒辦法上線 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)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
35
58
120
255