我的世界无重复的随机路线算法 每处都不一样

来源: 网络

我的世界无重复的随机路线算法,每处都不一样。我的世界是一个开放性和自由性都非常高的游戏,不但世界的大小是无限延伸的,就连随机路线都可以是处处不一样的哦。随机路线可以应用在很多地方,比如在制作一个地图时可以生成随机路线增加趣味,或者PVP中的地图的随机路线,再或者是地牢生成的随机路线。

主要原理如下:

我的世界每处都不一样 无重复的随机路线算法

在模块前需要预置几个项目:

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

(除了第一个,下面的全部都用Conditional模式)

我的世界每处都不一样 无重复的随机路线算法

深灰:

设定一个随机方块作为最终方向(标记为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 路线长度

来设定长度即可

下面是几种使用模式:

1.全随机

我的世界每处都不一样 无重复的随机路线算法

如果将四个方向同时作为候选方向,那么路线无法避免的会形成一个面

(上方的长度2000,下方长度为5000)

全随机适合构建一个随机的大陆地形

使用方式就是保留全部随机候选方向

2.三轴向随机

我的世界每处都不一样 无重复的随机路线算法

长度为30

长度2000

这种方式适合地牢的路线,不会构建一个面

使用方法就是随便去掉一个方向的候选,那么就不会向去掉的方向前进

还可以随机一个子路线的长度

这些都可以自己来实现


如果你想了解更多关于Minecraft我的世界中的一些疑难问题可以来我的世界攻略秘籍专区。

发表评论

邮箱地址不会被公开。 必填项已用*标注