Re: [轉載] [蟑螂賀失戀] 中階 LPC 第3~4章

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間17年前 (2009/03/06 16:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
string * 與 mixed 資料型態的部份其實大家大概都會用了,聖殿早期用到陣列時多半  是用 string * 或 int * 這樣的宣告方式,例如.. string *a; int *b; a=({"1","2",...}) b=({1,2,3,...}) 但現在多用 mixed。但 mixed 依據其字義是混合,意思就是說它  是混合的型態─自然也可以用陣列。  例如假設玩家身上有個儲存格叫 xxx,我們不知道 query 過來的  東西是啥,想去判斷時... mixed da=ppl->query("xxx"); 這樣的寫法就適用於 query 回來的東西「不管是啥,da 都可以 存」,然後再做底下的簡易分類... if(stringp(da)) return "da 是一個字串"; else if(intp(da)) return "da 是一個整數"; else if(mapp(da)) return "da 是一個 mapping"; else if(objectp(da)) return "da 是一個物件"; else if(arrayp(da)) return "da 是一個陣列"; (所以絕對不會有 mixedp 這樣的鬼東西) member_array 這個很好用,但 wiz 似乎很少用,它是用來判斷一個元素有沒  有存在於一個陣列裡頭,有的話傳回所在位置,沒有的話就傳回  -1 mixed str_array = ({"abc","de","fghi"}); if(member_array("abc",str_array)!=-1) return "abc 這個字串有在 str_array 這個陣列中 (ㄟ,我想起來了,之前的 wiz test 好像有一題這個) 前編譯器  作者花了一整個章節講這個。各位只要記哪些是常見的就可.. #define (大家都會用) #undefine (沒記錯的話 #undef 好像也可) #include (大家都會用) #ifdef #ifndef #if #elseif #else #endif #pragma #define 跟 #undef 我有用在某個區域,原先區域內的房間  都是繼承 ROOM,然後都 #include 同一個 .h 檔。  某一天我突然不想讓它們繼承 ROOM,我希望它們繼承別的,  但我又不希望去改房間的檔案時,簡易的做法就是在 .h 檔  中這樣子寫... #include <mudlib.h> // 這時 ROOM 也被 include 進來 #undef ROOM #define ROOM __DIR__+"my_room.c" 這樣全房間繼承到的 ROOM 實際上就會指向 my_room.c 了 再舉個例子,例如我用 LOTTE_OPEN = 1 來定義現在可以賭  大樂透.. #define LOTTE_OPEN 1 那假設我希望我只要把這行砍掉 or // 掉,就可以達到讓  整個大樂透系統處於無法簽注的情況時,假設底下是簽注函  數.. int bet_xxx(string str) { #ifudef LOTTE_OPEN write("你現在不能簽阿樂喔!!\n"); return 1; #endif write("你現在可以簽阿樂.\n"); return 1; } 它的意思就是說如果我有 #define LOTTE_OPEN 這個東西時 才可以簽,沒有 #define (#ifundef) 就不能簽。 (#ifdef 是類似的用法) 而它叫做「前譯處理」,想簡單一點......就是系統會預先  做的事情,例如你在 update 一個東西時,用 # 去定義的東  西它就會先去處理,大概是這個意思。 文章裡有舉到一些範例,就可以看看。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.228.153
文章代碼(AID): #19iEODQA (mud_sanc)
文章代碼(AID): #19iEODQA (mud_sanc)