精華區beta mud_sanc 關於我們 聯絡資訊
中階 LPC Descartes of Borg Novermber 1993 第一章: 簡介 1.1 基礎 LPC 閱讀此課本的人應該讀過基礎 LPC 課本或是夠熟悉 mud 世界的程式寫作. 不只是能建造房間和撰寫區域內有關的物件而已, 也該清楚自己寫出來的程式在 執行的時候到底在做什麼. 如果你覺得你的程度還不到, 就回去看完基礎 LPC 再來看中階 LPC 課本. 如果你達到要求, 你會發現你在此讀到的東西對你比較 有意義. 1.2 中階 LPC 課本的目標 此份介紹性的課本是為了對 LPC 一無所知的人, 讓他們有能力在任何 LPMud 寫出好的遊戲世界. 對 LPC 和建設 LPMud 來說, 自然要比建造房間、護甲、 怪物、武器來得艱深. 當你進入更複雜的概念, 例如公會; 或想更深入你的遊戲 世界, 你會發現基礎 LPC 詳細說明的概念裡面沒有這些東西. 中階 LPC 的設 計是把你從簡單的世界建造過程, 帶到完全了解 LPC 作為 LPMud 世界建造者 的知識. 撰寫 mudlib 本身的工作留到後面再講. 讀完這份課本, 並實際撰寫一 些實驗性的程式碼之後, 你們讀者應該能寫出合乎任何設計或想法的遊戲物件, 只要這樣我的目的就達到了. 1.3 概觀 到底多了什麼東西 ? 呃, 你們大部份都知道 LPC 支援映射 (mapping) 和陣 列 (array), 也曾問過我基礎 LPC 為什麼沒有詳細說明它們. 我覺得那些概念 超出我在基礎 LPC 課本裡面嘗試講述的範圍, 而比較適合放在這份課本裡. 不 過, 新工具都棒極了, 而重要的是, 你可以用新工具做啥. 基礎 LPC 課本的目 標是讓你能建造夠格的 LPMud 區域, 不需要映射 (mapping) 和陣列 (array) 就可以辦到. 這份課本的目標是讓你能在你的區域中實現任何點子, 這樣就需要 映射和陣列的知識. LPMud 中, 任何你想寫的點子都可能實現. 令人驚訝的是, LPC 語言非常適合實 現這些目標. 你無法寫出你的點子的原因是: 你對 LPC 的知識、不合的 mudlib 、你的 Mud 主題、mud 管理的政策. 這份課本沒辦法把你工作的 mudlib 變得 更好, 也無法改變你的 Mud 主題或 mud 的管理政策. 千萬別認為 LPC 沒辦 法做到你想做的事. 如果你的點子不容於 mud 主題或是管理政策, 那就是你的 點子無法在你現在的 mud 實現. 如果 mudlib 不合, 告訴負責 mudlib 的人, 在 mudlib 層面上可以做哪些事來增進它. 你會很驚訝, mudlib 中實際上有很 多你不知道的東西. 更重要的是, 讀過此課本後, 你應該能讀懂你 mud 的 mudlib 程式碼, 了解每一行程式在做啥. 你目前應該還沒有能力自己寫出這種 程式碼, 但是至少你可以了解 mudlib 層次在做什麼. 這份課本開始時, 討論 LPMud driver 到底在做些什麼. 這份課本的一個好處是 , 裡面所講的東西跟 driver 和 mudlib 無關 (除了 Dworkin Game Driver). 對於遊戲 driver 的章節不會深入實際的 driver 程式架構, 而是所有遊戲 driver 跑 mud 基本上所要做的事. 接著, 我討論每個人都想多了解一些的題目 ---- 陣列 (array) 和映射 (mapping). 要了解映射這種資料型態, 大概是最簡單也是最困難的事. 大致上 , 映射算是一種複雜的陣列, 要討論映射之前, 你應該先了解陣列. 一旦你了解 它們, 映射實際上要比陣列好用得多. 無論快慢, 用你最多的的時間來學習這一 章, 因為本章大概是這份課本裡頭最困難, 也是最有用的一章. 之後, 有一小章討論 LPC pre-compiler, 在你的程式碼送給 compiler 之前, 你可以用它來編排你的程式碼. 雖然我在這裡介紹得很可怕, 這章恐怕是這份課 本中最簡單的一章. 所以我把它擺在介紹映射和陣列的那一章之後. 接著重新介紹字串 (string) , 更詳細地教你如何處理字串, 像是分斷字串這種 高級的命令處理技巧. 只要你很了解陣列, 這章應該很簡單. 再下一章是這本課本第二重要的部分. 如果你想超越中階的水準、深入 mudlib 程式碼, 這可能是最重要的部分. 這章深入介紹 LPC 繼承 (inheritance) 的複 雜觀念. 既然這份課本的目標並不是教你設計 mudlib 的程式, 這章不會詳細討 論物件導向程式設計. 了解本章, 會讓你體會一些物件導向程式設計的內涵, 也 讓你能夠僭越 (overriding) 其他函式以寫出更複雜的物件, 並定義出你自己的 角色基礎職業. 最後, 課本以簡略地討論程式碼除錯作結. 這不是很重要的一章, 但是這樣也表 示此章不只是補充你目前所學的知識而已. 1.4 此課本沒有的東西 對某些人來說, 此份課本最大的、也是政策性的遺漏就是「投影」(shadow). 我 從來沒有看過使用投影是最好或最有效率的例子. 不過, 這樣也不代表投影一無 是處. 我在這份課本裡不介紹投影的理由是, 學習 LPC 的人, 最好在碰上投影 以前, 先從此課本學得一些觀念, 並花上時間去熟悉這些觀念. 這樣一來, 我覺 得學習 LPC 的人會有能力決定是否要使用投影. 我會在以後的課本裡討論投影. 如果你經常使用很多的投影, 請別認為上面這段文字是針對你的批評. 我也曾經 看過投影有很多優秀的用途. 不過, 投影並不是一個完成工作的好方法, 所以投 影並不適合這份中階課本的目標. 我也刪掉了討論系統安全和物件導向程式設計的部份. 這兩者很明顯都是討論 mudlib 方面的題目. 不過很多人大概會反對我不討論物件導向程式設計的作法. 我決定把這個課題留到以後再說, 因為大多數區域設計者是為了創作而撰寫程式 碼, 而不是為了資訊理論. 在中階和基礎的課本裡, 我決定只在實際 LPC 程式 設計上可以直接應用的地方討論物件導向程式設計的理論. 對於想撰寫一個龐大 mudlib 的 LPC 老手而言, 理論可能要實用得多. 不過以這份課本的目標來說 , 討論物件導向程式設計只是個讓人打瞌睡的題目. 我計劃在下一份課本裡多討 論這個理論. 1.5 總結 LPC 不難學習. 雖然比不上其他大部分電腦語言所常做的工作, 令人驚異的是它 非常強大, 在建造 MUD 這種遊戲的工作上, 也沒其他語言比得上它. 對初學者 來說, 它讓你易於學習, 甚至在你還不知道在做什麼的時候, 就能寫出有用的物 件. 對中階的人來說, 它讓你的任何點子變成文字化的虛擬實境. 對高階的人來 說, 它的物件導向特點, 可以讓你建造一個 internet 上最受喜愛的遊戲. 你唯 一所受到的限制, 是你了解多少東西. 而進一步學習並不需要資訊學位. Copyright (c) George Reese 1993 譯者: Spock @ FF 98.Jul.19.