第一章: 简介

MudOS v21c2

中阶 LPC

 Descartes of Borg
 November 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.

回到上一页