                第一章 Lpc程序和编程环境 
 
                第一节，编程环境 
 
 
    通常我们所见到的Mud大多是LpMud。LpMuds使用Unix的指令和 
文件结构。如果你对Unix有所了解，那么LpMud中的一些指令和它的 
文件结构与普通的Unix基本一样。如果你从未使用过Unix，那么它 
Dos不同的是在文件的路径用"/"，而不是Dos的"\". 
一个典型的LpMud的文件是这样的: 
    /clone/player/player.c 
"/clone/player/"是路径，player.c是文件名。 
在多数的LpMud中，下面这些的基本的Unix指令是可以使用的： 
pwd, cd, ls, rm, mv, cp, mkdir, rmdir, more, tail, cat, ed 
如果从未使用过Unix，那么下面这张表也许是有用的。 
pwd: 显示当前目录 
cd: 改换你当前的工作目录，和Dos的cd一样。 
ls: 列出指定目录下的所有文件，如果没有指定任何目录，那就列 
    出当前目录底下的文件。和Dos的dir一样。 
rm: 删除一个文件 和Dos的rmdir一样 
mv: 从命名一个文件 和Dos的move一样 
cp: 复制一个文件 和Dos的copy一样 
mkdir: 创建一个目录 
rmdir: 删除一个目录 
more: 按页显示一个文件在你的当前屏幕。 
cat: 显示整个文件。和Dos的type一样。 
tail: 现在一个文件的结尾几行。 
ed: 允许你使用Mud自带的编辑器，编辑一个文件。 
 
                第二节 Lpc程序 
 
 
2.1 Lpc程序。 
    Lpc的程序看起来和一般的C区别不断大，语法基本一样，但是 
Lpc和一般的语言有着根本的不同，Lpc程序是编写一个一个的"Object"。 
这有什么区别呢？一般的程序是在执行过程中，通常有一个明显的 
开始和和结束。程序从一个地方开始，然后顺序执行下去，到了结 
束的地方就中断了。Lpc的Object不是这样的。 
   所谓的不同的Mud，实际上是一些不同的Lpc的Object在一个Driver 
的上的各种不同的表现。也就说，Lpc的Object是运行在一个Driver 
上的。这些Object组成了LpMud的丰富多彩的世界。Driver几乎不参 
与创建你所接触到的世界，它所完成的工作只是让那些Lpc的Object 
活动起来。Lpc的Object可能没有明显的开始和结束的标志，它可能 
永远在工作。  和一般的程序一样，Lpc“程序”也是由一个或多个 
文件组成。一个Lpc的Object是按如下方式被执行的：Driver把和这 
个Object相关的文件读入内存，然后解释执行。但是要记住的是， 
读入内存，并不是说，它就开始按顺序执行。 
 
2.2 Driver和Mudlib关系 
  在有些游戏中，整个游戏包括Driver和游戏世界都用C写好，这样 
能快一些，但是游戏的扩充性很差，巫师们不可能在游戏进行中添 
加任何东西。LpMud则相反。Driver理论上应该和玩家所接触的世界 
几乎没有任何直接的联系。游戏世界应该是自己独立的，而且是“即 
玩即加”的。这就是为什么LpMud使用Lpc作为编程语言的原因。它 
允许你创建一个游戏世界，再由Driver在需要时读入解释执行。Lpc 
甚至比C更简单，更容易明白，但是它可以创建一个可以让许多人在 
上面游戏的世界。 
  在你写完一个Lpc的文件时，它存在于主机的硬盘上。在游戏进行 
中，当需要整个Object时，这份文件将被调入内存，一个特殊的函 
数被调用来初始化这个Object的一些变量。现在你不用关心什么是 
变量，什么是函数以及游戏本身怎样来调用这个object，你只要记 
住Driver从硬盘中读入一个文件，然后放在内存中，如果没有任何 
错误的话。 
 
2.3 一个Object被装人内存。 
  一个Object不会也不必有一个特点的地方让Driver去执行它，通 
常Drvier会在Object中找一个地方去初始化它。一般都是这个函数 
叫做create()。 
  Lpc的Object是一些变量(它的值能变化)和函数(函数通常是用来 
操纵那些变量的一段程序)的组合。函数操纵变量的方式有：调用 
其他函数，使用Driver内部定义的函数(efun)，基本的Lpc表达式 
以及流控制。 
  我们来看个变量的例子: wiz_level。这个变量记录你的巫师等 
级，如果是0呢，通常是普普通通的玩家了。这个值如果越大就表 
示你的巫师等级越高。这个也同时控制了你能不能执行一些巫师 
指令。基本上来说，一个Object就是一些变量“堆”在一起的东 
西。一个Object改变了，也就是某一个或者一些变量改变了。 
  总的来说，一个Object如果要被内存中的另一个Object调用， 
Driver会去找这个Object的那堆变量放在哪里，如果这些变量没 
有值，那么Driver会调用一个特定的函数create来初始化这些变 
量。 
  但是create()不是Lpc代码开始执行的地方，只是大多数的Object 
从这里开始。事实上，create()可以不存在。如果这个Object不 
需要对变量初始化，那么create()可以不存在。那么这样的Object 
开始执行的地方就完全的不同于一般的Object，可以从任何地方开 
始。 
 
  那么究竟什么是Lpc的Object？Lpc的Object就是一堆变量的集合， 
它带有一个或者更多的函数来操纵控制这些变量，函数的排列顺序 
是无所谓的，随便那个排在前面对这个Object的特性没有影响。 
