Minetest mesecons双活塞

Minetest mesecons双活塞

原帖:The Double Sticky Piston Driver | The Mesecons Laboratory


双活塞对于已经玩过mc红石的玩家不陌生,双个活塞都方块比单个活塞多一块

以下就是我们要做的机器(本文所有图片都来自原帖)

image_2021-06-05-18-36-47

第一步:设计

跟mc红石一样,要做一个机器要构想它该如何运行,让我们理清双活塞机器的大概思路:

  1. 后活塞是第一个推方块的,它推动一个活塞和一个方块
  2. 然后前活塞推动方块,使在它前面的方块推动一格
  3. 让前活塞收起活塞臂,因为它是粘性活塞,所以在它前面的方块会跟着拉回
  4. 让后活塞收起活塞臂,因为它是粘性活塞,所以在它前面的方块会跟着拉回
  5. 再让前活塞推动并收回在它前面的方块,使在它前面的方块回到原位

第二步:摆放

跟着图片放,注意活塞是粘性活塞

image_2021-06-05-18-48-10

第三步:控制

依照下面的图片摆完就可以了

image_2021-06-05-18-49-49

第四步:编程(最难的一步)

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)

结束

这样就能得到一个双活塞机器

第五步:改进

不过这机器还能改进,比如将布线缩短:

image_2021-06-05-19-37-18

或者你可以将线布置到地面下

image_2021-06-05-19-38-20