关于随机虚拟迷宫的写作

迷宫是一个游戏里经常要用到的东西，以前的迷宫都需要
巫师一个房间一个房间地手工绘制，费时费力，而且一旦
被玩家找出正确的线路，迷宫格局被泄漏，迷宫就不称其
为迷宫了，所以巫师们都绞尽脑汁把迷宫设计的尽量复杂，
但再复杂的迷宫早晚也会被找到正确的路线，而且过于复
杂难走的迷宫也使玩家感觉过于繁琐，降低乐趣。因此在
本游戏里我们产生了虚拟随机迷宫的概念。

我们的迷宫莫认为是一个由虚拟房间组成的正方形的迷宫，
比如设定单边长为10，也就是我们要创造一个10x10 有100
个房间的迷宫，而迷宫中房间之间的连接方法是由我们的
随机迷宫生成器，参看图 1，迷宫主物件完成对迷宫各项
参数的设置，这个物件需要继承：inherit VRM_SERVER;
（可参考/d/chang/didao.c 这个迷宫）。这里我们假设创
造一个树林迷宫，我们就把虚拟迷宫主物件起名为 shulin.c

在主物件中我们用 set_maze_long() 这个函数来设定迷宫的
单边长，这里我们要创造一个10x10的迷宫，因此 set_maze_long(10);
来设定。我们要求迷宫的入口方向在东面，在主物件中函数
set_entry_dir() 用来设定迷宫的入口方向，因此在这里我
们 set_entry_dir("east"); 来把入口方向设定在东面。而
出口方向为了保证迷宫的复杂度，我们默认在入口相反的方
向，这个例子就是西面，由于是系统默认，因此不需要我们
再设定。为了保证创造出来的迷宫尽量的均衡，我们把入口
尽量选择在进入面的中间位置，而出口我们在对面随机选择
一个，如图 1，我们用 ● 来表示入口和出口房间，而出口
和入口是随机得来的，也就是它的文件名是不固定的，而区
域房间要与此迷宫相连需要有固定的文件名，因此主物件还
要创造出两个固定名字的房间用来衔接迷宫和区域，迷宫入
口与区域的连接的房间我们规定为 entry ，迷宫出口与区域
的连接的房间我们规定为 exit ，这样区域房间就可以固定的
于这个我们创造出来的迷宫想连接了。在主物件中由一系列的
函数用来设定浙两个特殊房间的属性：
set_link_entry_dir()
用来设定 entry 与区域连接的方向，因此在这里我们
set_link_entry_dir("northeast"); 
set_link_entry_room() 函数用来设定区域与 entry 连接房
间的文件名，我们这里假设区域房间为与主物件 shulin.c 同
目录下的 xiaolu.c，因此我们 set_link_entry_room(__DIR__"xiaolu");
而区域房间 xiaolu.c 的出口设定 set("exits",...) 里我们
要加入 "southwest" : __DIR__"shulin/entry", 这个 mapping
使其与迷宫的 entry 相连。

set_link_exit_dir()
用来设定 exit 与区域连接的方向，因此在这里我们
set_link_exit_dir("west"); 
set_link_exit_room() 函数用来设定区域与 exit 连接房
间的文件名，我们这里假设区域房间为与主物件 shulin.c 同
目录下的 dashan.c，因此我们 set_link_exit_room(__DIR__"dashan");
而区域房间 dashan.c 的出口设定 set("exits",...) 里我们
要加入 "east" : __DIR__"shulin/exit", 这个 mapping
使其与迷宫的 exit 相连。

set_inherit_room()
函数用来设定迷宫里房间所继承的物件，在这里我们用
set_inherit_room( ROOM ); 来设定其继承标准 room，

set_entry_short();
函数用来设定 entry 房间的短描述，在这里我们
set_entry_short("小路旁");

set_entry_desc()
函数用来设定 entry 房间的长描述。在这里我们
set_entry_desc(@LONG
这里是少室山的半山腰，东北方向是一条崎岖的小路，向西
面望去是一片小树林，不时传来声声鸟鸣。
LONG
);

set_exit_short()
函数用来设定 exit 房间的短描述。在这里我们
set_exit_short("树林尽头");

set_exit_desc()
函数用来设定 exit 房间的长描述，在这里我们
set_exit_desc(@LONG
这里是一块洼地，东面是一片小树林，西面是一座大山耸入
云端。
LONG
);

**********
当然我们还要来设定迷宫房间的长短描述：

set_maze_room_short()
函数用来设定迷宫房间的短描述，这里我们
set_maze_room_short("小树林");

set_maze_room_desc()
函数用来设定迷宫房间的长描述，这里我们
set_maze_room_desc(@LONG
这是一片浓密的小树林，小鸟的鸣叫声和风吹过竹林的沙沙
声交织成美丽的大自然的旋律。地上杂草丛生说明这里很少有人
来。
LONG
);

**********
还有一些其他的函数：
set_outdoors()
函数用来设定迷宫房间（包括 exit 和 entry）是否维护外。
我们刚制作的迷宫为树林，所以我们 set_outdoors(1);

其他请参看例子。

********************
《本游戏关于随机迷宫的一下规定》
游戏区域制作中凡是遇到迷宫的地方必须使用随机虚拟迷宫。
迷宫的单边长不能小于 5，太小了失去迷宫的意义。我们一般
使用的迷宫为单边长 30-50，根据区域设计的故事情节而定。
如需使用单边长超过 100 的迷宫，须想负责此区域的 arch
申请。

	Find.


                          北


         ◎─◎─◎  ◎─◎─◎─◎─◎  ◎  ◎  
                 │      │  │      │  │  │  
         ◎─◎─◎  ◎─◎  ◎  ◎─◎─◎─◎  
         │      │                          │  
         ◎  ◎─◎─◎  ◎─◎─◎  ◎  ◎─◎  
                     │          │  │      │  
         ◎─◎─◎  ◎  ◎  ◎─◎─◎─◎─◎   区域
             │  │  │  │              │  │   /
         ◎─◎  ◎─◎─◎─◎─◎─◎─◎  ●─◎       东
                 │                      │  │  entry
         ◎─◎─◎  ◎─◎─◎─◎─◎─◎  ◎  
             │  │          │      │  │  │  
         ◎─◎  ◎  ◎─◎─◎  ◎─◎  ◎  ◎  
         │  │              │      │  │  │  
区 ─◎─●  ◎  ◎─◎─◎─◎  ◎─◎  ◎  ◎  
域  exit │      │  │      │      │      │  
         ◎  ◎─◎  ◎  ◎─◎  ◎─◎─◎  ◎  
                 │          │  │      │      
         ◎─◎─◎  ◎─◎─◎  ◎─◎  ◎─◎  
                                               
            图 1. (10x10的随机虚拟迷宫示意图)
