红绿灯(先拂)
本文介绍的是先拂的基岩版原版命令实现的红绿灯。商弦的Java版Denizen插件驱动的红绿灯参阅红绿灯。
先拂公路的路口使用命令驱动自动变化的红绿灯。该项技术经过多次迭代已趋于完善,是先拂自主研发的独家技术之一。
第三代(当前)
红绿灯的功能藉由其下方地下的盔甲架及中央的两组命令方块实现。
每个红绿灯盔甲架有两个标签、六个记分项。
统一标签
标签hlt
为所有红绿灯盔甲架共有,供计时器识别。
样式标签
标签hlt<1:字符串><2:字符串><3:字符串>
决定红绿灯的形状、方向、朝向。
<1>
- 无:竖排
h
:横排
<2>
- 无:方灯
-t
:左转-f
:右转-r
:调头
<3>
N
:朝南P
:朝北X
:朝西T
:朝东
变灯参数
记分板T1
、T2
、TO
的值决定了红绿灯的变灯时间。其中
$$0\leq T_1<T_2\leq59\\TO\in \{0,1\}$$
记当前秒数(虚拟玩家秒
的时间
记分板)为$t$,则$TO=1$的红绿灯,运行效果为:
$t\in$ | boje | 灯色 |
---|---|---|
$[T_1, T_2-2)$ | -1 | 绿 |
$[T_2-2, T_2)$ | 0 | 黄 |
$[T_2, 60)\cup [0, T_1)$ | 1 | 红 |
$TO=0$的红绿灯,运行效果为:
$t\in$ | boje | 灯色 |
---|---|---|
$[T_2, 60)\cup [0, T_1-2)$ | -1 | 绿 |
$[T_1-2, T_1)$ | 0 | 黄 |
$[T_1, T_2)$ | 1 | 红 |
中控原理
红绿灯盔甲架的T1s
记分板记为$T_{1s}$,T2s
记为$T_{2s}$;计时器命令方块每秒执行命令,使得
$$T_{1s}=T_1-t \\ T_{2s}=T_2-t$$
决色命令方块每秒根据$TO$及$T_{1s}$和$T_{2s}$的值来为boje
赋值。
加载命令方块每秒根据boje
的值及样式标签来加载对应状态的红绿灯(/structure load …
)。
第二代
在路口附近设控制所,安放一系列命令方块,以/scoreboard test …
、/structure load …
串联来实现红绿灯功能。其缺点是需要输入大量命令,各灯的红、黄、绿状态都需要一个单独的命令方块来实现,且/structure load …
命令中需要使用绝对坐标,安装起来很麻烦。但优点是自由度最高,且不受土建限制,故地下没有空间的、变灯规则复杂的路口仍需使用第二代红绿灯。
第一代
在路口附近设控制所,安放一系列命令方块及红绿灯模板,以/scoreboard test …
、/clone …
串联来实现红绿灯功能。
其他设计
先拂历史上还有一些红绿灯系统的其他设计,因各种原因没有实装。
第0代
这只是一个设计原型,并不兼容实际道路。
原型保存在康今附近。
第2.8代
第三代的一个开发版。采用切换式而非区间式。
第2.9代
功能与第三代同。但使用了长达十几个命令方块的链,比较占中央的空间。
本文没有完成。