LocusAzzurro
本帖最后由 LocusAzzurro 于 2021-8-22 13:09 编辑

前言 - 什么是兰顿蚂蚁

兰顿蚂蚁(Langton's Ant)是细胞自动机的例子,由黑白格子和一只“蚂蚁”构成,是一个二维图灵机。
规则很简单,若蚂蚁在白格,右转90度,将该格改为黑格,向前移一步;若蚂蚁在黑格,左转90度,将该格改为白格,向前移一步。

-- 维基百科 - 兰顿蚂蚁

下图是运行测试,可以看到成功生成出了“高速公路”。



function实现

生成蚂蚁
  1. execute as @s align xyz run summon minecraft:armor_stand ~0.5 ~ ~0.5 {Invisible:1b,Tags:["ant"],ArmorItems:[{},{},{},{id:"minecraft:player_head",Count:1b,tag:{SkullOwner:{Id:[I;-629171175,-966113690,-1206736499,1812113222],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWI2YWViNDQ0NjRiNGMxNTI4MGRjZDBjMjNjOTI4MTlkNmRkM2Y1ZjA4MjY0NmM0OTZkMDE2ZWU2YzExNDg4MCJ9fX0="}]}}}}]}
复制代码

迭代,RL规则(经典兰顿蚂蚁)
  1. execute as @e[type=minecraft:armor_stand,tag=ant] at @s if block ~ ~-1 ~ white_wool run tag @s add white
  2. execute as @e[type=minecraft:armor_stand,tag=ant] at @s if block ~ ~-1 ~ black_wool run tag @s add black
  3. execute as @e[type=minecraft:armor_stand,tag=white] at @s run tp @s ~ ~ ~ ~90 ~
  4. execute as @e[type=minecraft:armor_stand,tag=black] at @s run tp @s ~ ~ ~ ~-90 ~
  5. execute as @e[type=minecraft:armor_stand,tag=white] at @s run setblock ~ ~-1 ~ black_wool
  6. execute as @e[type=minecraft:armor_stand,tag=black] at @s run setblock ~ ~-1 ~ white_wool
  7. tag @e[type=minecraft:armor_stand,tag=ant] remove white
  8. tag @e[type=minecraft:armor_stand,tag=ant] remove black
  9. execute as @e[type=minecraft:armor_stand,tag=ant] at @s run tp @s ^ ^ ^1.0
  10. schedule function langtonant:rl 1
复制代码


实现说明

记得很久之前就有人做过这个算法,最近突然想到有了新版本的各种指令操作,会不会比较简单,事实是是的,刚好熟悉了一下从来没用过的caret notation。

生成部分,不管自定义头颅的一大串的话,主要的部分就是拿align对齐一下坐标,这样刚好在方块中间,以及挂tag用来选择。

迭代的部分,先检测两种方块上的“蚂蚁”盔甲架,并且用tag标记,不这样操作的话后面改方块的时候会连续覆盖,做的时候被这个坑了。
然后是旋转,白色顺时针90度,黑色逆时针九十度,用刚才的tag进行选择,同样的方式进行方块的更改,接着移除颜色的标记,这样下一轮重新标记。(似乎不清也没问题?),最后进行“向前一格”的操作。
这里也是试了下schedule,每次迭代之后直接挂上下次迭代。

后话

另外,兰顿蚂蚁可以扩展成多个颜色,尝试写了一个RLR。

1262249600
66666666666收到 感谢

闲辣姬缘
牛蛙牛蛙蛙

MC忠诚
MCBBS有你更精彩

我不是猫
我看不懂蓝盾蚂蚁  但是真的好牛的感觉

2639933720
1111111111111

Ph-苯
20w14∞,/warp ant,请。

武士的荣光
谢谢楼主的分享

月曰
谢谢分享,可以自己用了哈哈哈a

xjh2287
6666666666666

kuaiMC
牛蛙牛蛙牛蛙牛蛙

jiuanya
感谢楼主,太有用了

阿哲爱玩Mc
0000000000000000000000

风暴丶
原以为是一个没什么技术含量的东西 看了下面的代码 打扰了。。。

王清越520
感觉很厉害可以尝试一下

yueyueliang
这个东西看你说的挺牛,但是这有啥用?qwq

1378106363
我怎么没看懂呢

Forward1
看不懂   但我大受震撼

かふうちの
之前在B站看到有个纯红石的设计,那个作者也是大佬你吗

Rissica
这个雀氏牛蛙,学到了

第一页 上一页 下一页 最后一页