[閒聊] 無聊 coding 一下

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間14年前 (2011/11/17 11:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
沒辦法上線 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)
文章代碼(AID): #1En8Dygt (mud_sanc)
文章代碼(AID): #1En8Dygt (mud_sanc)