LPC是一種基於C語言開發的編程語言
主要用於寫MUD(多使用着迷宮)游戲
LPC是一種面向對象的語言,它有object的概念,但是沒有class
LPC有四中函數類型
1> apply 只能被游戲主題(游戲驅動)呼叫的函數
2> efun 外部函數,定義在游戲主題中的函數
3> ifun 本地函數,MUDLIB中的object定義的函數
4> sefun 模擬外部函數,本質上是本地函數,多數是重寫了efun(是游戲的核心函數)
LPC與C的差別
①LPC沒有指針,沒有結構
②存在新的數據類型:對象,映射
③字符串類型存在一定的差異
LPC的Object沒有明顯的開始和結束標志
LPC是編寫“Object”,即LPC程序是由一個或多個“Object”組成,在外部先將代碼
用Load_Object(object_name)將代碼載入內存
1 eg:ob = Load_object(sort.c) 2 ob->fun1(); // sort.c 中的Public函數 fun1 3 ob->fun2(); // sort.c 中的Public函數 fun2
在Object中 fun1、fun2 要事先聲明 然后再定義0
在Object中 變量是私有的,需要通過函數操作
函數可私有、可共有
變量是Object的一種屬性,函數則是對屬性的一系列操作
LPC的數據類型(與C相比):
1> 浮點型與整形相加
先向寬字節的變量類型對齊,然后運算
最終結果轉換為運算符左邊的類型
2> 字符串類型 string
①可用下標 string str_eg = "abcdefg" 則str_eg[1] = "b";
②string相加 str1 = "我們" str2 = "和" + str1 + "大家";
或用 str1 = sprintf("和%s大家", str0);
③line[0..0]和line[0]的區別,linep[0..0]返回的是整個字符串
3> mapping 映射
①mapping a = ( ["ab" = 1], ["cd" = 2])(鍵值對)
②映射變量存儲的是映射的地址、將映射a賦值給映射b: mapping b = a;
此時對b進行操作、a也會改變
③添加 直接加 map[kay] = Value; (會覆蓋原有值)
使用 += : map += ([key : value]);
④ 遍歷 * array key_arr = keys(map) // 取得map的所有鍵值,返回鍵值的數組
1 mixed value_temp ; 2 for(int i = 0; i<sizeof(key_arr); i++) 3 { 4 value_temp = map[key_arr[i]]; 5 }
*(這種類似於lua的 x in pairs(map)).
1 loop(member in map); .
此時member包含{key, value, no}(鍵, 值, 在mapping中的序號)
4> mixed (混合類型) // 類似於C++11 中的auto
* 用於函數的返回值 :private mixed mixed text();
* 用於函數參數:private mixed text(mixed a);
* 不確定函數參數的個數、類型時 參數可以寫成(...):
private mixed text(...)
5> 指定類型 var_type
其他類型 + ? : string?
作為函數返回值:
string? append_suffix (string? str)
此時這個類型可以是string類型 同時也可以是UNDEFINE(空類型)
6> array (數組)
① array({ 元素1, 元素2, ... })
元素可以任何類型,不用事先規定大小
② allocate_arry(size, x) 直接規定了數組的大小和數組內元素的初值
③ + a += ({4}) 右邊數組的元素 + 到左邊,位置在最后
④ - a -= ({2}) 從數組a中扣除右邊數組包含的元素(所有值為2的元素)
⑤ "&" 與操作
看第一個集合中的每一個元素,是否在第二個中出現過,所以結果與兩個操作幾個的先后順序有關
1 eg: s1 = {1,2,3} // 此時 s1 & s2 為 {1} 2 s2 = {1,1,1} // s2 & s1 為 {1, 1, 1}
⑥ mapping_array 函數
mapping_array (src, function fun)
mapping_array (src, ( :fun1: ));
將數組中的元素,一個一個作為函數的參數,作用后的結果放入新的數組中傳出,數組作為函數的最后一個參數
LPC的運算符
* ".." 表示范圍, "<:" 表示倒數
a[0..5]表示取數組的第0個到第5個構成的新數組
1> 左邊 小於0,右邊大於長度 則返回整個數組
2> 左邊大於右邊,返回
a[x..<y]
表示取數組的第x個數到數組的倒數第y個 數結束
所以 y最小為1
<< 左移 >> 右移
3 << 4 表示把3 轉為2進制,左移4位, 再轉為十進制 得出48 3 * 4^2