基礎 LPC
撰稿: Descartes of Borg
23 april 1993
簡介
如何使用此份手冊及使用的名詞
最近, 在 USENET 上面, 我看到許多人尋找 LPC 的使用手冊. 而且在我
mud 上的神族 (immortals) 也曾經告訴我 Nightmare 的架設文件有多好. 但
是在那些文件裡面, 並沒有適當地解釋 LPC 程式語言. 所以我決定試著撰寫一
份使用說明. 有些事情你必須謹記在心.
LPC 是一種非常易於學習的程式語言, 而它真正的價值也如我們在現實世界
所知的一樣. 我從 1991 年開始玩 mud, 並於一個月內, 在名為 Orlith 的原
Bates College MUD 中, 創造出一個不起眼的區域和樂師公會. 之後, 我搬到洛
杉磯 (Los Angeles) 一年, 完全沒有碰電腦或玩 mud. 在 1992 年六月, 我回
到 Internet 並擔任 Igor 的巫師. 在 1992 年九月, 我開始撰寫 Nightmare
mudlib 以符合我們的需要. 因為當時 MudOS 上並沒有任何 mudlib 能讓人直
接拿來跑, 所以後來決定把它公開出來 (當然, 現在可不是這樣 :)).
所以我只有不到一年的時間認真地撰寫程式. 如同主修資訊科學的人他們的
哲學, 我只想搞清楚, 要完全搞懂 LPC 程式寫作, 除了掛在 mud 裡頭以外,
並不需要拿你的電腦來作所有撰寫程式的事. 在此份使用手冊裡, 我們假設:
有人已經教過你最基本的 UNIX 命令, 例如: ls, cs, mkdir, mv, rm 等等.
你知道如何進入你的 mud 中的文字編輯程式, 並且儲存一個檔案. 除此以外沒
有其他的要求. 如果你熟悉 C 語言, 你反而會發現 LPC 雖然很像 C, 卻又不
是 C. 你以前對於模組化程式設計發展 (modular programming development)
的觀念還會扯你後腿. 如果你從來沒聽過 C 程式語言 (像我在 1991 五月那時
一樣) , 那你只缺基本的 C 結構, 像是程式執行的流程、邏輯運算子的規則等
等東西. 所以先前學的 C 對你而言並非有利, 因為能夠從 C 拿來用在 LPC
上的東西, 要學起來非常容易. 熟悉 C 跟 LPC 一點關係也沒有.
這份手冊分成若干章節, 表示你應該按順序閱讀它們. 先讀這份簡介, 再按照
chapter 那個檔案裡面所列的目錄依序閱讀. 每一章開始都有一個或兩個段落,
解釋你在該章節所應該了解的東西為何. 在這些簡介的章節之後, 就開始針對此
章節的主題作令人厭煩的詳細解釋. 在各章結尾, 會就你應該從此章中學到的東
西下個簡短的結論 (如果我寫的內容能讓你了解的話) . 接著, 也許會有一些跟
主題有關的註解, 而你並不需要去搞清楚註解內所講的東西.
如果你按照順序一章章研讀過來, 碰到某一章的簡介說你這時應該懂某些東西,
而你卻搞不懂的時候, 請寄信給我吧 ! 很顯然, 我在這裡寫的內容沒收到該有
的效果, 我得弄清楚我哪裡寫錯, 才能把錯誤的地方訂正過來. 如果某一章的總
結說你在看完該章後應該學會什麼而你沒學會, 一樣寄封信給我吧. 如果你的
mud 在 intermud 系統裡, 就寄給 descartes@nightmare. 不然, 寄給
borg@hebron.connected.com 即可. (譯按: 臺灣的 intermud 系統通常寄不到
美國的 mud. 而 borg@hebron.connected.com 是 1993 的地址, 已無法使用,
請改用 borg@imaginary.com )
一些手冊中用的基本名詞:
driver (驅動程式) -
這就是遊戲的 C 程式. 它接聽 socket (與其他電腦通訊) 、翻譯 mudlib 定
義的 LPC 程式碼、管理記憶體中的 mud 物件 (object) 、定期試著從記憶體
裡面把一些沒用的 mud 物件清掉、定期呼叫物件等等, 都由它負責.
mudlib (mud 函式庫) -
定義 mud 世界的 LPC 程式碼. driver 本身不是遊戲. 它只是一個創造多人
環境的程式. 就某方面來說, driver 就像是一個 LPC 的編譯程式 (compiler)
, 而 mudlib 像是編譯程式的函式庫 (library) (這樣比喻不太好). mudlib
定義一些基本的物件, 而創造 mud 世界的人重覆使用這些物件. 舉例來說, 像
是 /std/room (或 /room/room)、 /std/user.c (或 /obj/player.c) 等等物件
都是.
area (區域) 或 castle (城堡):
mud 創造者撰寫的某些物件, 這些物件用到 LPC「繼承」(inheritance) 的功能
, 具有基本 mudlib 物件的特性, 並轉換成玩家在遊戲裡面使用的物件.
object (物件):
房間、武器、怪物、玩家、袋子等等所有的東西. 更重要的是, 每一個名字結尾
是 .c 的檔案都是一個物件. 每個物件有不同的用途. 像是 monster.c 和
user.c 這兩個物件繼承 /std/living.c 這個基礎物件. 而基礎物件以外的物
件則有的拿來複製, 也就是在記憶體中再載入一份相同的程式碼; 有的則只是載
入記憶體, 而被其他的物件拿來呼叫 (reference).
native (原始) 及 compat (精簡):
這兩個名詞與最常用的兩種 driver 有關係. 原始模式的 mudlib 用於 LPMud
driver 3.0 以後的版本. 精簡模式指的是: 你可以拿一個 2.4.5 型式的
mudlib 配合 3.0 的 driver. 原始模式的 mudlib 指的是 MudOS、CD、LPMud
列出的原始模式 mudlib. 而精簡模式的 mudlib 指的是 3.0 以前的 LPMud
mudlib 和 3.* 精簡模式 mudlib. 我認為 Amylaar 的 mudlib 屬於精簡模式.
祝你順利 !
George Reese
(Descartes of Borg)
12 july 1993
borg@hebron.connected.com
(譯按: 已改為 borg@imaginary.com)
譯者:
Spock of Final Frontier 97.Dec.21