本帖最后由 Green_stone 于 2016-8-22 15:56 编辑
(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
第零部分 · 推箱子怎么玩
第一部分 · 实现简单的推“箱子”
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
第零部分 · 推箱子怎么玩
这个不用我废话了吧……一般人都会玩啊。
箱子会在游戏开始出现在一个地方,你需要把箱子推到终点就行了。
当然箱子碰到“墙”就不能继续往前推了。
我貌似就在废话啊……
第一部分 · 实现简单的推“箱子”
我们先拿一个方块来当作“箱子”,这里我使用的是橡树木板。 此时我们既要判断玩家是否在“推箱子”,站在箱子的附近,也要判断箱子的前面是否是一堵墙,此时我们可以使用execute嵌套。
某人:看起来很复杂的样子,实现它需要多少个命令方块?
只需要4个循环型命令方块!(至于没有循环命令方块的版本,只能使用高频了,嗯?你的版本没有命令方块?) 就像这样: 
各有什么用呢?其实是控制玩家各从四个方向的推动…… 比如说从前方推动,箱子的z坐标就要增加(因为是竖着推得),而从右边推呢,x坐标就要减少…… 接下来就拿往前方推动做例子吧!
第一层 嵌套(判断箱子是否在玩家面前,也就是玩家是否在推箱子) 第二层(判断箱子前有没有墙,如果没有墙才能接着执行,箱子前也就是玩家前面的前面……)
原理就是判断箱子前是不是空气方块。 (强调:如果使用嵌套,接下来的指令无需再输入“/”!)
接下来就是如何移动方块了。以前我写的推箱子中,貌似是使用两个setblock:“箱子”换成空气,原来的空气换成“箱子”。 不过现在!我想到了一个更好的方法! 它就是 /clone 指令!
某人:怎么可能?clone明明是复制(克隆)好不好?怎么可能是移动呢?
的确clone指令是用来复制的,但是在他的众多参数中,还有一个复制模式! 一般情况下,复制模式是normal(平常的),它能将方块正常复制。但还有一个move(移动)模式,它是将方块“搬”到一个地方,也就是说,复制完了“本体”就会消失!
所以指令如下:
什么?你还不会clone指令,点我!
那么以上只是一个方向,其他三个方向改一下坐标偏移值就可以了。
附赠效果图:

第二部分 · 优化推箱子(新手略过)
有没有发现自己做的跟上面的效果图不一样? 那是因为偏移值太大了。MC中的~偏移值貌似是从方块中心算起的…… 就像这样:
图中方块中心点离边缘(黑线)有0.5格,我们再把那段代码拿来:
这里我们偏移的值是1格,但是1格实在太大了,只要踩在箱子旁边方块的边缘就可以推动(因为你踩在边缘上,偏移1格后也就是箱子的边缘上,而箱子的边缘也就算作箱子的坐标了。),这很不合理对不对?没事,我们只要调小。 调到多小呢?有几个前提: 1.必须比0.5大,因为0.5连方块的边长的一半都不到。 2.精度不要太大,太多小数数位MC或许承受不了……
所以我们可以改成(这里是完整指令,偏移值我取了x+0.6):
第三部分 · 如何判断成功条件
推箱子是怎么判断成功的呢?一般成功都有个终点,当箱子推到那个点上时,就算成功。 这里我以橙色粘土来作终点。依然以往前推为例子。 上一步说到,当往前“推”箱子时,箱子会移动到玩家前的两格,也就是 ~2 ~ ~ ,那么箱子移动后下面的方块不就是 ~2 ~-1 ~ 了吗? 因此,我们使用execute探测,指令如下:
这里要执行的指令可以说一句“你赢了”之类的话,也可以把玩家tp到下一关。
某人:说了这么多,命令方块该怎么放?
依旧是以原来四个命令方块为基础,每个方向各放一个,我是这样放的:
这里使用连锁型命令方块,并带有条件制约模式,目的是实现 repeat和if 的搭配,简单来讲,就是一直执行execute(我们的execute是让玩家推动箱子对吧),那么新添的四个命令方块目的就是:当玩家推动箱子,执行指令(跟比较器差不多,节省空间)。执行什么呢?上面提到过了,记得每组命令方块一个方向哦~
第四部分 · 如何判断失败条件
上一部分做了成功部分,那么失败条件,就是方块到了墙角,完全动弹不得了(相当于卡关)。 我们有几个方法:
①简便法——在每个墙角地下都放一种方块。 很简便,只要再用几个execute判断就行了,但是我们很容易漏掉几个墙角。
②繁琐法——利用命令方块自动判断。 虽然麻烦,但是处理方便,只需要几个命令方块。
那么这里还是讲讲②。 推动到墙角有多少种情况呢?墙角都是前面一个,左边或者右边一个,甚至都有,总结,只有两个。 每个方向有两种情况,四个方向4×2=8种情况 所以类似的,我们这样放命令方块(每组多两个,因为每个方向有两情况):
然后为什么这次不用条件制约呢?因为貌似命令方块只能被其他一个条件制约啊。所以我干脆不用了。 因此这里的连锁型就完全变成了循环型。为什么不用循环型啊?多加红石,占用空间啊…… 指令依旧是使用execute嵌套,因为跟第一部分类似,我就不多讲了。(注意:这里使用了三层execute嵌套,判断箱子一层,判断墙体两层!) 本处提供向前推的两种情况,请参考!(至于其他方向,我相信你们的实力!) 注:你可以把stone 6改成任何其他方块的值,如果你看过了第二部分,可以更改一下偏移的值!
如果你想要制作一个推箱子类的地图,翻页查看偏向地图制作者的教程!
(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
第五部分 · 分出“关卡”
如果你做的推箱子像弄成一个趣味地图的话,不能忘记了关卡这个东西。 我们先做以下步骤:
我们原来是这样的布局:
我们需要这样(将命令方块分散开,空一格):
然后在分散开的中间放上条件制约的命令方块:
某人:什么?我还不知道什么各个方向移除箱子方块!
就是你往哪个方向推动了箱子,赢了或者输了,但每次的方向不同,移除箱子方块的坐标偏移也就不同了!这个还是大家自己写吧……(注:setblock时~偏移值不要用小数点,会放错位置!,clone也一样!)
然后我们新加的命令方块要做什么呢?简单说,如果赢了,我们玩下一关;输了,重新这一关。
深奥地,共同点就是都初始化(开始)了一关,但是,赢了的话会比输了多一个步骤:将关卡值+1。
那怎么才能根据 关卡值 进入正确关卡呢?这时需要用到虚拟积分计分版,dummy。点我。
创造一个Level计分版:
制作一个根据Level变量进入不同关卡的系统:

这普通命令方块指令写的是testfor不是execute原因就是没什么好指令执行的,只能靠后面的连锁式(注:接下来的连锁型都使用条件制约,代替比较器的作用) 然后呢?连锁型命令方块里填两个指令:①每一关tp到哪?②每一关箱子放哪?
简单的关卡系统就做完了,现在就是如何使用它。
前面说过,失败会重新开始那一关而不增加Level的值。所以我们只要在有testfor的命令方块上铺红石线,失败了setblock放一个红石块即可重新开始。
(注:重要!还要在红石块放置后执行完关卡系统,清除这个红石块!)
成功通关时,还得增加1 Level值再执行,这个我就不详细说怎么搞了,但是我还是想给出加Level值的指令:
还有一点,例如我做了5关,到了最后一关,赢了,这时Level的值不就是6了吗?再在关卡系统加上一排探测6的,探测到时,处理全图通关。
第六部分 · 后续工作
到此为止,地图大半儿做完了,我们还需要:
①地图的出生点,也就是选择可以“开始游戏”、"选关"之类的地方。
②每一关卡的地图,和创意。仅仅有墙壁和箱子是很无聊的,你可以加入一些有趣的东西。如:
红色粘土,玩家站上去不会失败,但是将箱子推上去会失败重来。
指令类似每一关终点的黄色粘土,这里还是给出向前推的指令:
③部分指令,我还没给出,比如成功时怎么触发过关的关卡系统,全图通关该怎么办,这些还是大家自己想想吧!
附 · 地图下载地址
作者还提供了自己原版推箱子的地图哦~ 版本:1.9+ “推箱子”v1.0版-http://pan.baidu.com/s/1gfBI2sz
地图全景图片:
拒绝伸手党,严禁转载狗。纯原创,如果好,请给出您的金粒人气!
(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
制作部分
第零部分 · 推箱子怎么玩
第一部分 · 实现简单的推“箱子”
第二部分 · 优化推箱子(新手略过)
第三部分 · 如何判断成功条件
第四部分 · 如何判断失败条件
如果你想要制作一个推箱子类的地图,翻页查看偏向地图制作者的教程!
2021.12 数据,可能有更多内容
(注:本教程适用版本为1.9+!)看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
制作部分
第零部分 · 推箱子怎么玩
这个不用我废话了吧……一般人都会玩啊。
箱子会在游戏开始出现在一个地方,你需要把箱子推到终点就行了。
当然箱子碰到“墙”就不能继续往前推了。
第一部分 · 实现简单的推“箱子”
我们先拿一个方块来当作“箱子”,这里我使用的是橡树木板。 此时我们既要判断玩家是否在“推箱子”,站在箱子的附近,也要判断箱子的前面是否是一堵墙,此时我们可以使用execute嵌套。
某人:看起来很复杂的样子,实现它需要多少个命令方块?
只需要4个循环型命令方块!(至于没有循环命令方块的版本,只能使用高频了,

各有什么用呢?其实是控制玩家各从四个方向的推动…… 比如说从前方推动,箱子的z坐标就要增加(因为是竖着推得),而从右边推呢,x坐标就要减少…… 接下来就拿往前方推动做例子吧!
第一层 嵌套(判断箱子是否在玩家面前,也就是玩家是否在推箱子)
代码:
- /execute @a ~ ~ ~ detect ~1 ~ ~ planks 0 <接下来的指令>
原理就是判断箱子前是不是空气方块。
代码:
- execute @a ~ ~ ~ detect ~2 ~ ~ air 0 <接下来的指令>
接下来就是如何移动方块了。以前我写的推箱子中,貌似是使用两个setblock:“箱子”换成空气,原来的空气换成“箱子”。 不过现在!我想到了一个更好的方法! 它就是 /clone 指令!
某人:怎么可能?clone明明是复制(克隆)好不好?怎么可能是移动呢?
的确clone指令是用来复制的,但是在他的众多参数中,还有一个复制模式! 一般情况下,复制模式是normal(平常的),它能将方块正常复制。但还有一个move(移动)模式,它是将方块“搬”到一个地方,也就是说,复制完了“本体”就会消失!
所以指令如下:
代码:
- /execute @a ~ ~ ~ detect ~1 ~ ~ planks 0 execute @a ~ ~ ~ detect ~2 ~ ~ air 0 clone ~1 ~ ~ ~1 ~ ~ ~2 ~ ~ replace move
那么以上只是一个方向,其他三个方向改一下坐标偏移值就可以了。
附赠效果图:

第二部分 · 优化推箱子(新手略过)
有没有发现自己做的跟上面的效果图不一样? 那是因为偏移值太大了。MC中的~偏移值貌似是从方块中心算起的…… 就像这样:

代码:
- /execute @a ~ ~ ~ detect ~1 ~ ~ planks 0 <接下来的指令>
这里我们偏移的值是1格,但是1格实在太大了,只要踩在箱子旁边方块的边缘就可以推动(因为你踩在边缘上,偏移1格后也就是箱子的边缘上,而箱子的边缘也就算作箱子的坐标了。),这很不合理对不对?没事,我们只要
所以我们可以改成(这里是完整指令,偏移值我取了x+0.6):
代码:
- /execute @a ~ ~ ~ detect ~0.6 ~ ~ planks 0 execute @a ~ ~ ~ detect ~1.6 ~ ~ air 0 clone ~1 ~ ~ ~1 ~ ~ ~2 ~ ~ replace move
第三部分 · 如何判断成功条件
推箱子是怎么判断成功的呢?一般成功都有个终点,当箱子推到那个点上时,就算成功。 这里我以橙色粘土来作终点。依然以往前推为例子。 上一步说到,当往前“推”箱子时,箱子会移动到玩家前的两格,也就是 ~2 ~ ~ ,那么箱子移动后下面的方块不就是 ~2 ~-1 ~ 了吗? 因此,我们使用execute探测,指令如下:
代码:
- /execute @a ~ ~ ~ detect ~2 ~-1 ~ stained_hardened_clay 4 <要执行的指令>
这里要执行的指令可以说一句“你赢了”之类的话,也可以把玩家tp到下一关。
某人:说了这么多,命令方块该怎么放?
依旧是以原来四个命令方块为基础,每个方向各放一个,我是这样放的:

第四部分 · 如何判断失败条件
上一部分做了成功部分,那么失败条件,就是方块到了墙角,完全动弹不得了(相当于卡关)。 我们有几个方法:
①简便法——在每个墙角地下都放一种方块。 很简便,只要再用几个execute判断就行了,但是我们很容易漏掉几个墙角。
②繁琐法——利用命令方块自动判断。 虽然麻烦,但是处理方便,只需要几个命令方块。
那么这里还是讲讲②。 推动到墙角有多少种情况呢?墙角都是前面一个,左边或者右边一个,甚至都有,总结,只有两个。 每个方向有两种情况,四个方向4×2=8种情况 所以类似的,我们这样放命令方块(每组多两个,因为每个方向有两情况):

代码:
- /execute @a ~ ~ ~ detect ~2 ~ ~ planks 0
- execute @a ~ ~ ~ detect ~3 ~ ~ stone 6
- execute @a ~ ~ ~ detect ~3 ~ ~1 stone 6 <要执行的指令>
代码:
- /execute @a ~ ~ ~ detect ~2 ~ ~ planks 0
- execute @a ~ ~ ~ detect ~3 ~ ~ stone 6
- execute @a ~ ~ ~ detect ~3 ~ ~-1 stone 6 <要执行的指令>
如果你想要制作一个推箱子类的地图,翻页查看偏向地图制作者的教程!
(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
地图部分
第五部分 · 分出“关卡”
如果你做的推箱子像弄成一个趣味地图的话,不能忘记了关卡这个东西。 我们先做以下步骤:
我们原来是这样的布局:



为什么呢?因为成功步骤在简单推箱子中我们只需要一个execute嵌套对吧,最后的指令可以写“你赢了”,但是在做地图时,往往不够。你需要将那一关的箱子删除掉,然后将玩家tp到下一关……所以,我们再加一层目的是让指令方块多执行一条指令。
我们将原来判断赢的execute命令方块中“要执行的指令”改成各个方向移除掉箱子方块(因为那一关已经赢了)。 判断输的也一样改成各个方向移除掉箱子方块(因为那一关输了要重新开始,那个箱子就不需要了)。某人:什么?我还不知道什么各个方向移除箱子方块!
就是你往哪个方向推动了箱子,赢了或者输了,但每次的方向不同,移除箱子方块的坐标偏移也就不同了!
然后我们新加的命令方块要做什么呢?简单说,如果赢了,我们玩下一关;输了,重新这一关。
深奥地,共同点就是都初始化(
那怎么才能根据 关卡值 进入正确关卡呢?这时需要用到虚拟积分计分版,dummy。点我。
创造一个Level计分版:
/scoreboard objectives add Level dummy
制作一个根据Level变量进入不同关卡的系统:

这普通命令方块指令写的是testfor不是execute原因就是没什么好指令执行的,只能靠后面的连锁式(注:接下来的连锁型都使用条件制约,代替比较器的作用) 然后呢?连锁型命令方块里填两个指令:①每一关tp到哪?②每一关箱子放哪?
简单的关卡系统就做完了,现在就是如何使用它。
前面说过,失败会重新开始那一关而不增加Level的值。所以我们只要在有testfor的命令方块上铺红石线,失败了setblock放一个红石块即可重新开始。
(注:重要!还要在红石块放置后执行完关卡系统,清除这个红石块!)
成功通关时,还得增加1 Level值再执行,这个我就不详细说怎么搞了,但是我还是想给出加Level值的指令:
代码:
- /scoreboard players add @a Level 1
还有一点,例如我做了5关,到了最后一关,赢了,这时Level的值不就是6了吗?再在关卡系统加上一排探测6的,探测到时,处理全图通关。
第六部分 · 后续工作
到此为止,地图大半儿做完了,我们还需要:
①地图的出生点,也就是选择可以“开始游戏”、"选关"之类的地方。
②每一关卡的地图,和创意。仅仅有墙壁和箱子是很无聊的,你可以加入一些有趣的东西。如:
红色粘土,玩家站上去不会失败,但是将箱子推上去会失败重来。
指令类似每一关终点的黄色粘土,这里还是给出向前推的指令:
代码:
- /execute @a ~ ~ ~ detect ~2 ~-1 ~ stained_hardened_clay 14 setblock x y z redstone_block
地图下载
附 · 地图下载地址
作者还提供了自己原版推箱子的地图哦~ 版本:1.9+ “推箱子”v1.0版-http://pan.baidu.com/s/1gfBI2sz
地图全景图片:

拒绝伸手党,严禁转载狗。纯原创,如果好,请给出您的金粒人气!
为什么我感觉我看到过=-=
测试了下,碰撞体积可以设置成0.35,这样有推箱子的感觉,0.6还没碰到箱子就跑了。
monogull 发表于 2016-8-22 16:50
测试了下,碰撞体积可以设置成0.35,这样有推箱子的感觉,0.6还没碰到箱子就跑了。 ...
0.35是绝对不行的……因为必须大于0.5,才能侦测到附近的方块……
这个推箱子的小游戏我也想过,并且我觉得应当再加一个东西,就是只有当玩家处于潜行状态时靠近箱子才会产生推动效果。这样只要用计分板给sneaktime不为0的玩家加个tag就好了,也不麻烦,而这样做的好处是可以避免误推误碰,方便玩家考察地图(玩家需要全面了解地图的结构才能想好怎么推)
如果可以的话加方块移动的效果就好了
盔甲架+骑着落沙+一点点tp
盔甲架+骑着落沙+一点点tp
FHC红石 发表于 2016-8-22 18:40
如果可以的话加方块移动的效果就好了
盔甲架+骑着落沙+一点点tp
只移动一格距离的话,人脑会自动脑补一个动画出来,我个人觉得那个动画效果已经够了吧,因为推箱子一般都是一下子就推过去的嘛。
咦,不是推“箱子”么?
为什么不推箱子要推木板。。。
本帖最后由 Green_stone 于 2016-8-23 12:08 编辑
这个问题问的好……箱子看起来很不美观……
而且我的世界箱子其实是盒子,真正推箱子箱子就像木板一样。
MODlover 发表于 2016-8-23 10:01
为什么不推箱子要推木板。。。
这个问题问的好……箱子看起来很不美观……
而且我的世界箱子其实是盒子,真正推箱子箱子就像木板一样。
噗看标题我还以为是什么黑科技推真正的箱子
本帖最后由 star_dada 于 2016-8-25 15:51 编辑
我把这个话删了
我把这个话删了
star_dada 发表于 2016-8-25 14:26
然而帕西视频在1.8就做过了,你是抄袭,还是巧合
帕西是谁,什么抄袭。而且这个贴原来也是1.8写的,只不过改写到这个贴了而已。不知道能别乱说嘛。
我听说有人做推箱子,不知道是不是你说的“帕西”,听说使用经验球做的,我做的跟经验球没有半点关系,再说用经验球效果一点都不好,没撞到墙就停住了,先看贴比较比较再说
Green_stone 发表于 2016-8-25 14:20
帕西是谁,什么抄袭。而且这个贴原来也是1.8写的,只不过改写到这个贴了而已。不知道能别乱说嘛。
我听说 ...
对不起,我没看完,误会你了,原谅一下我的冲动
原来detect还能用小数
建议加上ry,rym,rx,rxm啊
建议加上ry,rym,rx,rxm啊
可是蛋疼的是选择器的x、y、z不能用偏移……
然后像这种表示方向的参数,我不常用……
卡住了,怎么发了两个贴
然后像这种表示方向的参数,我不常用……
涨知识了呢!谢谢楼主了
本帖最后由 栗子z 于 2017-2-24 21:36 编辑
表示莫名借楼主的原理改进成了ooc
其实0.51格就行了.......
还有我为什么要吐槽啊
表示莫名借楼主的原理改进成了ooc
有道理!!!!!1111
又是一个游戏
Green_stone 发表于 2016-8-22 17:05
0.35是绝对不行的……因为必须大于0.5,才能侦测到附近的方块……
上面的没毛病