mud_sanc 板


LINE

各位 wiz 大多已有 80% 以上初階 LPC 的功力,spoke 翻譯的文章 裡頭講的東西各位就算原先不知它的來龍去脈,也幾乎都會用了。 這裡拿幾個需要特別提出來的地方來講。 LPC 是一種非常易於學習的程式語言 有心的話很快就可以學會它,通常如果摸超過五年,就會想把它 應用在現實生活中;摸超過十年,就會想說它能不能對工作有幫 助。會 asp 與簡易 c/vb/java1 的人上手特別快。 雖然一個物件裡面並沒有規定要從一個固定的地方開始執行程式, driver 卻要 先找到一個固定的地方並執行之, 才能初始化一個物件. 在精簡模式的 driver 上, 這是一個叫作 reset() 的函式. 在原始模式 mud 中, 則是 create(). 這個是泛指大部份的情況,聖殿的物件通常會有個 create 函數 通常就是透過 create 函數去做初始的設定。 但這個並不是必要的,以聖殿為例,設定一個房間就像底下... inherit ROOM; void create() { ::create(); set("short","一間房間"); } 但這樣的房間也可以用底下的東西來實現... mapping data=(["short":"一間房間"]); mapping query_ob_data() { return data; } mixed query(label) { return _query(data,label); 因為一般的房間只要宣告 data 這個變數,並定義兩個方法給 它: query_ob_data 以及 query,就可以是房間了,因為這樣 的房間假設叫 ob,我們可以 ob->query_ob_data() ,也可以 ob->query(xxx) (大部份讀物件資料都是靠這樣子讀) 不過一般會建議若要採簡易寫法,最好還是.. inherit ROOM; mapping data=([ 看要塞啥資料給它再塞 ]); 也就是繼承 room 會有的一些函數庫與變數,然後再自定變數 的資料給它,各位可以 more /std/ob/room.c 來看一個房間 大概定義了哪些基本的函數給它。 這裡延伸了一個概念。假設我們弄了一個房間出來,然後我們 不允許這個房間的資料(data變數)被修改,簡易的做法就是.. inherit ROOM; mapping data=([ 看要塞啥資料給它再塞 ]); void set(string label,mixed value) { } void add(string label,mixed value) { } void delete(string label,mixed value) { } 這樣對這個房間的 set、add、delete 等動作就會失效。 函式庫 通常一個系統包含幾個部份... 1)資料庫 2)函式庫 3)程式集 函數與程式集的差異通常只在 return 值的部份,例如說底 下的東西.. string query_ppl_name(object ppl) { return ppl->query("name"); } 這東西硬要去分它是函式庫的函數或是一個副程式沒啥意義 ,用功能去區分,這函數是讀 ppl 的 name,只用來讀 ppl 的 name 而已也沒做啥,寫這東西出來是要給系統裡頭幾個 地方用的(例如很多地方都必須讀玩家的 name).. 那它就比較像函數,而其實所謂函數就是我們丟給它一個東 西,它會出現別的東西(例如 y = f(x), 丟 x 給 f, 它會給 我們 y) 副程式就類似底下.. void set_ppl_name(object ppl,string names) { ppl->set("name",names); } 就是我們希望它做啥事,然後系統裡頭很多地方都需要做同 樣的事時,就可以把它獨立出來寫成副程式。 我最近會開始講家族系統,並且解開 /adm/group 的可讀權 限,大概就會講到類似的東西。 迴圈 使用 while 之類的迴圈語法時,要注意一件事,就是要設定 它的終止條件。沒有中止條件的迴圈就類似底下.. while(1) { ... } 因為 1 這東西代表的是 true,每迴一次它都判斷其為真, 一直為真,就一直迴圈。 迴圈中止條件一般有兩種常見設法.. while(在這裡設定中止條件) 或者 while() { 在某個地方設定中止條件; } 例如拿同一件事來說,要跑 1 + 2 + ... +100,寫法一是.. i=1; sum=0; while(i++<100) sum=sum+i; 寫法二是.. i=0; sum=0; while(i++) { sum=sum+i; if(i==100) break; } 比較要注意的是,以上面的 i==100 break 為例,個人寫程式 多年,個人的經驗就是,寧願給它 range 較大的限制範圍,也 不要太執著於把程式寫的很精準。 例如我的寫法通常就是 if(i>=100) break; 這是為了以防萬一。另外寫在迴圈內的終止條件,如果是一個 大迴圈 or 多層式迴圈,終止條件也可以考慮給兩個以上。 而大部份 do {} 能做的事情 while 也能做,聖殿 do 用的比較 少。 Laechan --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.228.153







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP