除了一些基本的生成外,该模组还提供了一种生成迷宫的方式。

迷宫的生成逻辑可抽象为:规划一个三维矩阵,矩阵中每个元素(房间)具有相同的长宽高,并定义哪一面可以和其他元素连接(房间的墙壁和出入口),使用这些元素连接矩阵中的两点。

也可以抽象理解为用管道连接两个机器。

请先确保你已经熟悉了这篇教程

该教程对迷宫规划为:一个长宽为15房间的平面迷宫,每个房间长宽为3方块,高为1方块。

为了避免确定方向的麻烦,该教程平面图统一以上方向为北,按f3确定面朝方向。

搭建迷宫部件,需要的基础部件为直路、三岔路、转角、交叉路、死路。此处红色部分抽象为墙壁。(该教程中这些部件可旋转,如果你不想让部件旋转,则需要将每一个可能连接的方向都搭建出来)

[进阶]生成一座迷宫-第1张图片

搭建迷宫基板,尽管一个脚本方块即可生成迷宫,但依旧建议搭建一个结构来包住迷宫。[进阶]生成一座迷宫-第2张图片

西北角放置一个脚本方块,右击打开,点绿色加号,切换到“生成迷宫”。[进阶]生成一座迷宫-第3张图片

迷宫id:可随意填写,之后添加的房间部件中的迷宫id需要与此保持一致。

shift:迷宫整体结构相较于该脚本方块的偏移量。

[进阶]生成一座迷宫-第4张图片

迷宫id旁的编辑:定义房间单元大小。[进阶]生成一座迷宫-第5张图片

迷宫:默认连接器:房间墙壁位置,为保持统一不建议更改。

[进阶]生成一座迷宫-第6张图片房间:定义迷宫矩阵大小。如该教程中迷宫矩阵长宽为15,高为1,注意此处是从0开始计数的。[进阶]生成一座迷宫-第7张图片

[进阶]生成一座迷宫-第8张图片

将“增加”改为“削减”可以定义何处不参与生成,如本例中让迷宫中央空出一块。[进阶]生成一座迷宫-第9张图片

点击“可视化”即可查看迷宫生成参与的空间。[进阶]生成一座迷宫-第10张图片

出口:定义迷宫矩阵的连接点,本例中需要让四个边的中点和中心连接。[进阶]生成一座迷宫-第11张图片

默认连接器为path,你也可以定义为其他名称来实现如门对门这样的特殊连接,只有当两者的连接器名称相同才会连接。三个数值代表在矩阵中所处的位置。如该处定义为矩阵中心位置,以北面为path连接点。[进阶]生成一座迷宫-第12张图片

规则:在此处定义哪两个出口连接,或者可以直接定义连接所有定义的出口。[进阶]生成一座迷宫-第13张图片

保存,使用方块选择工具将该结构保存下来,不需要额外特殊设置。[进阶]生成一座迷宫-第14张图片

迷宫部件:选中教程开始时搭建的部件之一,保存界面如下:[进阶]生成一座迷宫-第15张图片

进入生成,选择“迷宫配件”,进入编辑。[进阶]生成一座迷宫-第16张图片

生成id:随意填写。

迷宫id:在脚本方块中定义的迷宫id。

权重:该部件在迷宫中被使用的概率。

默认连接器:保持统一不建议更改。

[进阶]生成一座迷宫-第17张图片房间:如果你的部件想要大于定义的基础单元大小,你可以增加这里定义的数值,只能等比例放大。利用“增加”和“削减”也可以搞出异形房间。[进阶]生成一座迷宫-第18张图片

出口:定义每个面的连接器,此处为直线形房间的定义(南北联通),它会随着房间的旋转而做出相应更改。

[进阶]生成一座迷宫-第19张图片保存。剩下的房间以同样的方式定义及保存,注意每个面的连接。

所有部件保存完成后进行/#reload,随后便可以/#gen生成迷宫结构。[进阶]生成一座迷宫-第20张图片


后记:在先前使用过程中发现迷宫生成结构过于简单(两个出口处仅有一条线路连接,几乎无岔路),如今再进行测试时未发现类似问题。如果你遇到了类似问题,可以在矩阵中多定义几个出口,也可以选择删掉其中一个部件使得迷宫生成完整性检查总是不通过从而试图填满整个矩阵。