中阶 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 of the Final Frontier	98.Jul.19.
