Minetest mesecons双活塞
原帖:The Double Sticky Piston Driver | The Mesecons Laboratory
双活塞对于已经玩过mc红石的玩家不陌生,双个活塞都方块比单个活塞多一块
以下就是我们要做的机器(本文所有图片都来自原帖)
第一步:设计
跟mc红石一样,要做一个机器要构想它该如何运行,让我们理清双活塞机器的大概思路:
- 后活塞是第一个推方块的,它推动一个活塞和一个方块
- 然后前活塞推动方块,使在它前面的方块推动一格
- 让前活塞收起活塞臂,因为它是粘性活塞,所以在它前面的方块会跟着拉回
- 让后活塞收起活塞臂,因为它是粘性活塞,所以在它前面的方块会跟着拉回
- 再让前活塞推动并收回在它前面的方块,使在它前面的方块回到原位
第二步:摆放
跟着图片放,注意活塞是粘性活塞
第三步:控制
依照下面的图片摆完就可以了
第四步:编程(最难的一步)
A端口在开关前,但是你摆放时其他端口在开关面前,也不用怕,灵活点,可以将代码修改一下
我们先理清luacontroller要执行的操作
if pin.a then
--extend
else
--retract
end
然后通过刚才的思路,就能得到下面的代码
if event.iid == "pull1" then
port.b = false
interrupt(0.2, "push2")
elseif event.iid == "push2" then
port.c = true
interrupt(0.2, "pull2")
elseif event.iid == "pull2" then
port.c = false
else
if pin.a then
port.b = true
port.d = true
else
port.d = false
interrupt(0.2, "pull1")
end
end
不过上面的代码会让大部分人感到懵逼,但是没关系,我会一步一步地解读这个代码的
如果从头到尾看这代码意思是(请注意luacontroller端口是在全部代码执行后才设置的):
如果事件参数是pull1时
端口b为false
中断0.2秒后执行下面的代码,并设置事件iid成pull2并传递到下次的呼叫
如果事件iid是push2时
端口c为true
中断0.2秒后执行下面的代码,并设置事件iid成pull2并传递到下次多呼叫
如果事件是pull2时
端口c为false
当上面的条件都不满足时
如果输入a打开时
接口b为true
接口d为true
当上面的条件不满足时
接口d为false
中断0.2秒后执行下面的代码,并设置事件iid为pull1
结束(这里的结束只是因为else下面的代码是一个完整的代码,所以需要加end)
结束
这样就能得到一个双活塞机器
第五步:改进
不过这机器还能改进,比如将布线缩短:
或者你可以将线布置到地面下