在 Minecraft 中实现高度自动化的铁路系统

2018/10/14

概述

Minecraft 中提供基本的铁路功能:有铁轨,有矿车。尽管游戏中已经有动力铁轨可以为矿车提供动力,以及依靠红石可以进行一些简单的控制,但这仅仅是满足在生存模式下的需要。我的设想是,尽可能模仿现实中的地铁般的铁路系统。

那么,现实中的铁路是怎样的?

首先就是车站。由于我不是 Minecraft 建筑师,因此我不会太多地将精力放在车站的装饰上,而是更多地关注与铁路系统的集成以及功能性,其中比较重要的是屏蔽门的控制。

其次是车辆控制。如果是在生存模式下玩游戏,在轨道上放置一两辆矿车就足够了,不需要什么控制。然而我希望能够有多辆矿车能同时在轨道上跑。这就像在现实中有一班次又一班次的列车。

另外还要做到,当矿车到站时,屏蔽门能被自动打开,然后时间一到,屏蔽门被自动关闭,矿车自动出发。所有的这些过程全部自动完成,无需人工干预。

用原版 Minecraft 来完成上述任务显然有些力不从心,因此我要引入几个 Mod:

铺设轨道

RailCraft 提供了不同功能的轨道,它们分别带有不同的外观。因为我觉得它们外观比原版的轨道更好看,因此我将使用 RailCraft 中的「强化轨道」,而实际中你换成原版的轨道也是没有问题的。

Snipaste_2018-10-14_11-10-19.png

信号控制

大多数铁路系统中都有闭塞系统。所谓的「闭塞系统」就是用于防止列车相撞的系统,具体可搜索维基百科。这里简单介绍一下,在闭塞系统中,整条线路会被分成很多段闭塞区间,闭塞区间的长度取决于列车以及轨道性质等参数和因素影响,而闭塞系统就是保证在一个闭塞区间内不能有超过一辆列车。

RailCraft 也有提供一些方块用于控制信号,使用那些方块可以构建出一套闭塞系统。但是 RailCraft 给的那套信号系统太复杂。

因此这里我使用另外一个 Mod,它就是「Signals」。这个 Mod 可以提供一套无需配置的闭塞系统,而且它兼容 RailCraft 中的轨道。

使用 Signals 中的 Block Signal 方块就能将铁路分成多个部分,而这其实就是在将铁路分成多个闭塞区间。

尽管 Signals 是不需要配置的,但使用时还是有些东西需要注意。

其一,每个 Block Signal 方块一定要放在轨道旁边,而且要注意方向。

Snipaste_2018-10-14_11-29-50.png

看上图,轨道旁边的黑色的小方块就是 Block Signal。在我设计的这条线路中,矿车靠右前进,也就是右边这条轨道是前进方向。Block Signal 方块可以放在轨道两边的任意一边,但我为了避免混淆,我就靠右放置。

注意 Block Signal 方块上有两个指示灯(关于指示灯的含义我稍后讲)。指示灯所朝的方向必须与矿车前进方向相反

其二,Block Signal 最好与动力轨道(在我这个 1.10.2 中翻译似乎是「推进轨道」)一起使用,因为这与 Block Signal 的工作原理有关。还是看回上面那张图片,轨道上两个 Block Signal 之间的轨道为一个闭塞区间。当闭塞区间上没有矿车时,后方的 Block Signal 的指示灯显示绿色,同时为给旁边的推进轨道提供红石信号,以便为矿车提供动力(顺便一说,这样连拉杆或红石火把都省了);当闭塞区间上存在矿车时,后方的 Block Signal 的指示灯显示红色,同时中断对旁边的推进轨道的红石信号供给(但如果强行在另外一边给这个轨道提供红石信号,那还是可以的),这样,后面的来的矿车因为遇到没有红石信号的推进轨道而减速并停下来(如果矿车的车速过快,请向后连续放置多个推进轨道以便让矿车有足够的制动距离),等到前面的矿车离开该闭塞区间之后,Block Signal 会恢复红石信号并让矿车前进(矿车自己无法自行出发,即使推进轨道被激活)。

站台

在现实的地铁中,通常以两种站台为主:一种是岛式站台,另一种是侧式站台。我在 Minecraft 中的设计是,矿车与站台的交互所涉及的红石电路是放在站台附近的,因此不同的站台类型会影响站台布局。

岛式站台

在岛式站台中,轨道被分在站台的两侧。同一个站台可以搭乘两个不同方向的车。

Snipaste_2018-10-14_12-44-33.png

使用岛式站台时,红石电路放置在站台的两端,也就是两条轨道开始分叉/靠拢的地方:

Snipaste_2018-10-14_12-51-31.png

由于空间的限制,控制屏蔽门的电路和控制矿车出发的电路只能分别放置在轨道的两侧。

侧式站台

在侧式站台中,站台被轨道分在两侧,如果想要从能搭乘一个方向的站台转到能搭乘相反方向的站台,必须通过其它途径才能到达对面,但侧式站台在空间使用上比较自由。

Snipaste_2018-10-14_13-03-42.png

Snipaste_2018-10-14_13-08-18.png

(第二张图为侧式站台其中一侧站台的内景)

你也许会觉得这里的侧式站台与现实中的差别有些大,这主要是因为现实中列车是比较长的,因此站台也是长的,而 Minecraft 中矿车只占一格空间,没必要弄成长的。

矿车与车站交互

此部分可能需要一定的红石基础

目标

由于在 Minecraft 中没有办法像现实那样由一个铁路控制中心来管理,因此只能在由车站探测矿车是否进站(通过一些带探测功能的方块来实现),然后发出红石信号,并且这些红石电路都是放在车站中。

对于红石电路的处理,我的要求是电路尽可能封装起来。不过有个特例是控制屏蔽门的红石线,控制屏蔽门的红石线必须与屏蔽门直接连接,而我又不想将这部分的线路往深一层埋(主要是考虑到会影响以后可能的换乘,因为另外一条铁路及其站台要设置在其下方)。

对于矿车从进站到出站的全程,流程大概是:矿车即将进站,此时矿车被探测到,接着在很短的时间内到达屏蔽门前并停下,此时屏蔽门打开;几秒钟之后,屏蔽门关闭,矿车出发。全程不需要人工操作(即不用手动打开屏蔽门,不用手动按 W 键使矿车前进)。

红石电路设计

因为在岛式站台中,控制屏蔽门的红石电路与控制矿车发车的红石电路是分开的,在这里我就以岛式站台为例来讲述电路设计,这样可能会清楚些。

矿车先是准备进站。我不打算使用探测轨道来探测矿车,而是 RailCraft 中的矿车传感器。因为如果使用探测轨道,那么就一定要在探测轨道旁边放置红石或红石中继器等方块,而这些方块是有透明空间的(即不是像正方体的方块那样),因此不能满足我的「尽可能封装」的要求。而 RailCraft 中的矿车传感器则可以,因为它长这样子:

Snipaste_2018-10-14_15-26-38.png

而且它的材质除了边框以外,其它部分都与普通的石头相同,这比较容易与铁路隧道的墙壁相融合。

接下来是设计控制屏蔽门的电路。利用上面的矿车传感器,可以通知打开屏蔽门,但由于矿车经过传感器是一瞬间的事,经过之后传感器就不再输出红石信号,因此需要一个能保存状态的红石电路(而不是直接将传感器与屏蔽门相连)。这里我使用 RS 触发器,这样即使矿车离开传感器以后,电路仍能保持状态从而使屏蔽门持续打开。

那么如何设计 RS 触发器?先放一张图:

Snipaste_2018-10-14_16-52-15.png

图中有两个重要的方块,我在图中标上 R 和 S。先暂时忽略旁边的一堆红石中继器。当矿车来临时,S 方块左边的矿车传感器被触发,将信号通过一个红石中继器传递给 S 方块。这里使用红石中继器来连接传感器和 S 方块是为了做一个小小的延时,因为矿车经过传感器还要经过一小短距离才到达屏蔽门门口。当红石信号传递到 S 方块之后,S 方块被强充能,从而使附着在 S 方块上的红石火把熄灭。一开始被强充能的 R 方块现在因为输入信号的中断而没有被强充能了,这样附着在 R 方块上的红石火把就被点亮。附着在 R 方块上的红石火把有两条输出,一条指向图片的左下角(在游戏中其实是连接了屏蔽门),另一条则是指向 S 方块。此时附着在 R 方块上的红石火把向 S 方块输入红石信号,S 方块仍然被强充能。因为有了来自附着在 R 方块上的红石火把的信号输入,即使矿车传感器不再输入信号,整个电路的状态仍然能够被保持。

那么,如何控制时间一到就关闭屏蔽门呢?图中的 S 方块(注意是方块本身而不是红石火把)有一条连接了一列红石中继器的线路。这条线路最终指向 R 方块,如下图:(原谅我忘了作标记)

Snipaste_2018-10-14_17-07-41.png

当矿车传感器将信号传递 S 方块时,S 方块还会将红石信号传递给旁边的线路。这条线路连接了好几个红石中继器。当延时完成以后,红石信号被输入到 R 方块中。接下来 R 方块被强充能,附着在 R 方块上的红石火把熄灭,因此 S 方块不再被强充能,回到初始状态,同时连接了屏蔽门的红石线路也中断信号,因此屏蔽门关闭。

接下来就是处理如何让矿车在屏蔽门门口停下,然后时间一到就发出的问题。首先时间控制肯定是用红石中继器。那么让矿车停车是不是用动力轨道(推进轨道)呢?不是。推进轨道虽然能使矿车停下,但不能使它出发,即便是提供红石信号给推进轨道,也需要手动按下 W 键才能让矿车出发(但可以为已经运行的矿车提供动力使其继续前进),另外,一格的推进轨道不能保证较快的矿车立即停止,使用多格的推进轨道则无法保证矿车能准确地停在屏蔽门门口。

这里使用 RailCraft 中的「封锁轨道」。封锁轨道具有使矿车驻留或出发的功能,而且受红石信号控制。封锁轨道有多种模式,我们需要用 RailCraft 的「扳手」对着封锁轨道右击,将模式切换到「列车扣留模式」。在这个模式下,矿车遇到没有被红石信号激活的封锁轨道将会立即停车(而不是制动);等到封锁轨道被红石信号激活之后,封锁轨道就会使矿车前进出发。

那么具体如何使用?看下图:

Snipaste_2018-10-14_17-30-42.png

图中左边的就是之前提到过的矿车传感器。矿车经过传感器时,传感器就会将红石信号传递给后方的红石中继器,然后一路传递到最后一个红石中继器中,最后一个红石中继器则继续将信号传递给石头,石头被强充能,又将红石信号给封锁轨道。这里使用石头而不是红石中继器是为了封装这一内部的红石电路。

屏蔽门

Minecraft 自带的门显然不能当屏蔽门,因为它与现实中的屏蔽门差太远。这里我使用另外一个 Mod,这就是 MalisisDoors。它里面有个门叫「高科技门」,虽然样子有些难看,但行为上比较符合现实的屏蔽门。

Snipaste_2018-10-14_17-43-11.png

Snipaste_2018-10-14_17-43-19.png

仔细看第二张图,当门打开时,门是能“融入”旁边的方块中,因此表明上看它要占用三格的长度,而实际上这个门只是 1×1×2,其中 2 是高度。

视频演示

写了这么多文字,有些朋友可能会好奇最终的结果。为此我录了三个小视频,地址:https://www.bilibili.com/video/av33851206/ 。里面有 3 个 P。第一 P 是以坐在矿车的视角来看矿车从进站到出站的过程;第二 P 是以飞行的状态从天花板俯望轨道,来观看矿车进站过程中轨道的状态以及屏蔽门的工作过程;第三 P 是我把原来用于封装红石电路的墙壁暂时拆掉(为了方便演示),然后展示矿车从进站到出站整个过程中红石电路的状态。视频录的比较随意,诸位不必太在意录制过程的细节。

油管地址:

全文结束。