Re: [轉載] [蟑螂賀失戀] 中階 LPC 第3~4章
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間17年前 (2009/03/06 16:59)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19