關于隨機虛擬迷宮的寫作

迷宮是一個游戲里經常要用到的東西，以前的迷宮都需要
巫師一個房間一個房間地手工繪制，費時費力，而且一旦
被玩家找出正確的線路，迷宮格局被泄漏，迷宮就不稱其
為迷宮了，所以巫師們都絞盡腦汁把迷宮設計的盡量復雜，
但再復雜的迷宮早晚也會被找到正確的路線，而且過于復
雜難走的迷宮也使玩家感覺過于繁瑣，降低樂趣。因此在
本游戲里我們產生了虛擬隨機迷宮的概念。

我們的迷宮莫認為是一個由虛擬房間組成的正方形的迷宮，
比如設定單邊長為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的隨機虛擬迷宮示意圖)
