随机路线可以应用在很多地方
比如在制作一个地图时可以生成随机路线增加趣味
或者pvp中地图的随机路线
再或者是地牢生成的随机路线
演示存档:
http://pan.baidu.com/s/1hrd2SdA
主要原理如下:
在模块前需要预置几个项目:
1.名为Start的dummy计分版,代表路线长度
2.分别名为'L''R''U''D'的实体,代表四个方向
3.名为'N'的实体充当中介
橙色:
设置这个随机路线的长度
- /scoreboard players add @p Start 路线长度
放置Start计分版意外毁坏
- /scoreboard objectives add Start dummy
来到模块内部,分为很多子模块:
蓝色:
构成一个循环次数为路线长度的for循环
- /execute @p[score_Start_min=1] ~ ~ ~ /scoreboard players remove @p Start 1
黄色:
for循环内部嵌套(一个Conditional型),并且绘制路线(可以将此处替换为其他指令,表示整个随机路线的内容,为了方便演示此处是填充羊毛)
- /execute @e[name=N] ~ ~ ~ /setblock ~ ~ ~ minecraft:wool
绿色:
防止重复,给代表四个方向的实体移除一个bool变量,使其不参与此轮循环
- /execute @e[name=N] ~ ~ ~ detect ~1 ~ ~ minecraft:wool 0 scoreboard players tag @e[name=R] remove Direct
粉色:
如果N周围都是方块,也就是说路线陷入了一个胡同,此时给代表所有方向的实体重新添加bool变量,重新参与随机,让路线走出胡同
- /execute @e[name=N] ~ ~ ~ testforblock ~1 ~ ~ minecraft:wool 0
深灰:
设定一个随机方块作为最终方向(标记为FDire)
- /scoreboard players tag @r[type=ArmorStand,tag=Direct] add FDire
白色:
枚举方向的操作(标记为FDire的为最终方向)
- /execute @e[name=R,tag=FDire] ~ ~ ~ execute @e[name=N] ~ ~ ~ tp @e[name=N] ~1 ~ ~
纯蓝色:
重置所有操作,便于下一轮for
- /scoreboard players tag @e[name=R] add Direct
紫色:
当次数用尽后,结束循环
- /scoreboard players reset @p[score_Start=0] Start
如果概括原理,不妨如下:
效果/使用方式:
首先创建一个名为N的实体:
- /summon ArmorStand ~ ~ ~ {CustomName:"N",NoGravity:1}
- /scoreboard players add @p Start 路线长度
下面是几种使用模式:
此外可以结合多个随机模块来实现树形随机路线
还可以随机一个子路线的长度
这些都可以自己来实现
[groupid=546]Command Block Logic[/groupid]