2.3 代码风格 
  在上面说过函数的顺序对这个Object的特性是毫无影响的。 
但是一个有着良好代码风格的程序对LpMud是很重要的。因为 
LpMud通常不会也不可能是一个人完成的，如果程序没有较好 
的可读性，那么别人理解你的“作品”是很困难的。而且有个 
良好的程序风格能给人以优雅的感觉，因此希望大家写的Lpc 
程序能有个好的风格。大家中的有些人可能以后会加入XO team 
创建自己梦想中的世界，我们要求你采用如下的格式书写程序。 
 
2.3.1 头文件 
  在一个文件的开头是一段说明。采用如下格式： 
 
/* /u/trill/obj/test.c 
 * from XO Object Library 
 * 测试用的Object 
 * created by trill 19970808 
 * version @(#) test.c 2.1@(#) 
 * last modified by trill 19971008 
 * 测试tell_wizard这个simul_efun 
 */ 
第一行是这个文件的绝对路径，就是全路径。 
第二行是它所在的Mudlib 
第三行是它的功能的简单的描述，可以超过一行。 
第四行是这个文件的作者和创建时间。 
第五行是它的版本号，可能做了多次修改，甚至可能会重写， 
      这个数字2.1标志了它大概做过多少次改动。 
第六行是最后一次修改的人和时间。 
第七行是最后一些修改什么东西。 
 
  对于一个Object我们要求必须有这样一段说明，特别是前面 
的五行必须存在，如果做了改动那么最后两行也要加上。 
这样一般的一个Object，我们从这段说明就能了解到一些很重 
要的信息。 
 
下面是include一些文件和继承(inherit)一些Object。 
 
#include <ansi.h> 
#include "include/test.h" 
 
inherit NPC; 
 
先系统的文件，后自己定义的一些头文件。特别要求的是必须 
有个和这个Object同名的".h"文件，比如"test.h"放在这个 
Object所在的目录的下一级目录"include"底下，就是说在 
include部分的最后一行是#include "include/test.h"。 
在test.h定义所有在test.c用到的函数的原形，以及定义一些 
宏和常量。 
  这样做的好处是： 
第一不用出现一个函数在引用时没有说明， 
第二如果想知道这个Object有什么函数，直接看这个文件就可以 
了，不必去看那个test.c，可能test.c非常长。 
第三如果建立一个help系统，用来查询每个Object存在的函数， 
那么这样直接去读test.h就可以，否则是一件很麻烦的事。 
 
关于inherit我们在继承部分再说。 
 
2.3.2 变量说明 
 
  在变量说明部分，大家最好在每个变量后面加一个简单的说明。 
 
2.3.3 函数 
 
  一个Object的函数的顺序和名字对这个Object的表现是毫无影 
响的。但是为了让这个Object有良好的可读性，我们要求一个Object 
的函数按如下方式排列和命名： 
  首先是变量的接口部分，这些函数统一用Set+变量名来改变该 
变量的值，用Get+变量来返回变量的值。比如 
 
static int level; 
 
void SetLevl(int i) 
{ 
    level = i; 
} 
 
int GetLevel() 
{ 
    return level; 
} 
  其次是一些操纵和控制变量的一些函数。比如 
 
void AddLevel(int i) 
{ 
  一个Object的函数的顺序和名字对这个Object的表现是毫无影 
响的。但是为了让这个Object有良好的可读性，我们要求一个Object 
的函数按如下方式排列和命名： 
  首先是变量的接口部分，这些函数统一用Set+变量名来改变该 
变量的值，用Get+变量来返回变量的值。比如 
 
 static int level; 
 
void SetLevl(int i) 
{ 
    level = i; 
} 
 
int GetLevel() 
{ 
    return level; 
} 
  其次是一些操纵和控制变量的一些函数。比如 
 
void AddLevel(int i) 
{ 
    level += i; 
} 
 
这两类函数要求每个单词的第一字母大写。 
 
  再是一些Object所能做的事件(event)，比如战斗，结婚等等。比如 
 
void eventQuit() 
{ 
   ... 
} 
 
  这些函数要求事件的每个单词的第一字母大写，比如eventFight, 
eventMarry等等。 
 
  再下面的是由Driver调用的一些函数，比如create(), heart_beat, 
setup()。 
 
  最后是一些这个Object自己私有的函数，完成一些特别的功能。这些 
函数通常让要求每个单词的小写，中间用下划线(_)隔开。 
 
  要注意的是每个函数之间用一个空行隔开。 
 
  这些是对一个文件的整体要求，如果你有兴趣将来在XO team写程序， 
最好从现在开始就养成这样的编程习惯。如果你是别的Mud里面的巫师， 
我想一个Mud里面最好也有一个统一的整齐的风格。 
  也许你会问，这样要求有必要吗？这样太麻烦，程序写了自己能明 
白就可以了。这是不对的，LpMud是大家合作的项目，如果你做的程序 
别人没法看懂，不知道写的东西里面有些什么，能调用什么函数，那 
么实际上你写的东西是失败的，没人会去用它，它可能永远“死”在 
硬盘上。而且函数统一的命名法能尽快找到你所需要的函数，同时也 
能提高整个程序的可读性。 
  对于代码风格XO还有一些别的要求，我们将在以后的文章中介绍， 
如果你加入了XO team，代码风格将是第一篇要读的文章。 
 
小结: 
  关于Lpc程序和编程环境，就介绍到这里。看完这一章，我想大家 
要记住的是LpMud是采用Lpc做为编程语言，Unix文件结构作为文件组 
织形式。Lpc是编写Object的一种语言，它的程序没有特殊的开始和 
结束的标志。如果Object被使用到，那么它被调入内存，如果这个 
Object有一个叫create()的函数，首先被执行，来初始化一些变量。 
Lpc的Object是一堆变量的集合，同时带有一些能操纵改变这些变量 
的函数。Lpc的代码风格，我想一个Mud最好有一个统一的风格，特别 
的XO有自己的特别的要求。 
 
题外话： 
  当了好久的巫师，也用Lpc写了一些东西。我一直在试着理解Lpc， 
因为以我看如果一个巫师没有真正理解Lpc，他就不可能真正理解 
LpMud。理解Lpc并不仅仅意味着会使用它，许多巫师能使用它但是 
并不真正理解它。我希望在这个Lpc的介绍文章，能给大家一个Lpc 
的整体的印象，真正把握和理解Lpc，能创造自己心中梦想的世界。
