Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 3013|回复: 14

[命令方块] 【Mc1.9】[2b]无重复的随机路线算法

[复制链接]
发表于 2015-12-19 17:06:12 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 贰逼 于 2015-12-19 17:39 编辑
随机路线可以应用在很多地方
比如在制作一个地图时可以生成随机路线增加趣味
或者pvp中地图的随机路线
再或者是地牢生成的随机路线

演示存档:
http://pan.baidu.com/s/1hrd2SdA


主要原理如下:

在模块前需要预置几个项目:
1.名为Start的dummy计分版,代表路线长度
2.分别名为'L''R''U''D'的实体,代表四个方向
3.名为'N'的实体充当中介


橙色:
设置这个随机路线的长度
  1. /scoreboard players add @p Start 路线长度
复制代码
品红:
放置Start计分版意外毁坏
  1. /scoreboard objectives add Start dummy
复制代码

来到模块内部,分为很多子模块

蓝色:
构成一个循环次数为路线长度的for循环
  1. /execute @p[score_Start_min=1] ~ ~ ~ /scoreboard players remove @p Start 1
复制代码


黄色:
for循环内部嵌套(一个Conditional型),并且绘制路线(可以将此处替换为其他指令,表示整个随机路线的内容,为了方便演示此处是填充羊毛)
  1. /execute @e[name=N] ~ ~ ~ /setblock ~ ~ ~ minecraft:wool
复制代码


绿色:
防止重复,给代表四个方向的实体移除一个bool变量,使其不参与此轮循环
  1. /execute @e[name=N] ~ ~ ~ detect ~1 ~ ~ minecraft:wool 0 scoreboard players tag @e[name=R] remove Direct
复制代码


粉色:
如果N周围都是方块,也就是说路线陷入了一个胡同,此时给代表所有方向的实体重新添加bool变量,重新参与随机,让路线走出胡同
  1. /execute @e[name=N] ~ ~ ~ testforblock ~1 ~ ~ minecraft:wool 0
复制代码
(除了第一个,下面的全部都用Conditional模式)


深灰:
设定一个随机方块作为最终方向(标记为FDire)
  1. /scoreboard players tag @r[type=ArmorStand,tag=Direct] add FDire
复制代码


白色:
枚举方向的操作(标记为FDire的为最终方向)
  1. /execute @e[name=R,tag=FDire] ~ ~ ~ execute @e[name=N] ~ ~ ~ tp @e[name=N] ~1 ~ ~
复制代码


纯蓝色:
重置所有操作,便于下一轮for
  1. /scoreboard players tag @e[name=R] add Direct
复制代码



紫色:
当次数用尽后,结束循环
  1. /scoreboard players reset @p[score_Start=0] Start
复制代码


如果概括原理,不妨如下:





效果/使用方式:
首先创建一个名为N的实体
  1. /summon ArmorStand ~ ~ ~ {CustomName:"N",NoGravity:1}
复制代码
然后使用指令:
  1. /scoreboard players add @p Start 路线长度
复制代码
设定长度即可

下面是几种使用模式:





此外可以结合多个随机模块来实现树形随机路线
还可以随机一个子路线的长度
这些都可以自己来实现
来自群组: Command Block Logic

评分

参与人数 2人气 +2 金粒 +20 收起 理由
林扬骐 + 1 真正的原理在@r……这帖子有点夸张了…….
kongbaiyo + 1 + 20 屌飞 太有用了

查看全部评分

回复

使用道具 举报

发表于 2015-12-19 17:14:53 | 显示全部楼层
指令渣,只看到了标题的2b....
回复

使用道具 举报

发表于 2015-12-19 17:22:08 | 显示全部楼层
<div>/execute @e[name=N] ~ ~ ~ detect ~1 ~ ~ minecraft:wool 0 scoreboard players tag @e[name=R] remove Direct</div><div>/execute @e[name=N] ~ ~ ~ detect ~-1 ~ ~ minecraft:wool 0 scoreboard players tag @e[name=L] remove Direct</div><div>/execute @e[name=N] ~ ~ ~ detect ~ ~ ~1 minecraft:wool 0 scoreboard players tag @e[name=U] remove Direct</div><div>/execute @e[name=N] ~ ~ ~ detect ~ ~ ~-1 minecraft:wool 0 scoreboard players tag @e[name=D] remove Direct</div>

乱码了
回复

使用道具 举报

 楼主| 发表于 2015-12-19 17:28:15 | 显示全部楼层
回复

使用道具 举报

发表于 2015-12-19 17:32:08 | 显示全部楼层
很遗憾我看不见图
回复

使用道具 举报

发表于 2015-12-19 17:33:29 | 显示全部楼层

这到底是为啥啊,我就不信你的图都能挂...
回复

使用道具 举报

发表于 2015-12-20 10:21:58 | 显示全部楼层
快晕掉……话说这究竟是什么意思……
无重复路线?怎么做到……
晕掉……
回复

使用道具 举报

发表于 2015-12-22 18:58:05 | 显示全部楼层
图挂,没图我无法理解

不过这绝对是个好东西
回复

使用道具 举报

发表于 2015-12-22 19:54:27 | 显示全部楼层
这是什么意思,晕(反正先学1.8)
回复

使用道具 举报

发表于 2015-12-22 20:24:12 | 显示全部楼层
这东西够6…
原理就是一个for循环,然后每次执行指定一个方向,再加入走出死胡同的?还是没怎么看懂
回复

使用道具 举报

 楼主| 发表于 2015-12-22 21:26:34 | 显示全部楼层
lzs1234 发表于 2015-12-22 20:24
这东西够6…
原理就是一个for循环,然后每次执行指定一个方向,再加入走出死胡同的?还是没怎么看懂 ...

差不多对了
回复

使用道具 举报

发表于 2015-12-22 21:48:17 | 显示全部楼层
我想到了某人的迷宫算法?
回复

使用道具 举报

 楼主| 发表于 2015-12-22 22:01:04 | 显示全部楼层
andylizi 发表于 2015-12-22 21:48
我想到了某人的迷宫算法?

本质上来说不是一样的

迷宫算法是随机方向无路线
然后强行测试出一条路线
回复

使用道具 举报

发表于 2016-2-16 10:46:10 | 显示全部楼层
表示指令到了16w04a就看不懂了
1.8的指令勉强可以看懂
回复

使用道具 举报

发表于 2016-2-18 09:52:50 | 显示全部楼层
2b大法好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-9-25 08:53 , Processed in 0.172418 second(s), 9 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表