几天前在群里听说@乙烯_中国 在做扫雷,自己也去试了试,虽然知道老外早就做了一个算法精简的,但是毕竟做作品不是跟老外比,所以还是做了一个精简版的扫雷,原理和老外的相似,但是稍微逊色了一点,因为他的自定义大小很轻松,而我的要手动人



这就是全部的电路大小


由于懒得改材质了,数字就用不同颜色的羊毛代替,从右到左是1-8,红石块是雷
名为1的蛋是相当于扫雷里的左键,2的蛋想到于扫雷里的右键
原理简析:


我的原理和老外的原理最大的不同就是,他的是用方块,我的使用实体,没一个方块吓都有一个ArmorStand,每一个都记为一个单位
面开始讲原理:
1、雷的生成
/spreadplayers+相对坐标
2、雷数
根据原版扫雷规则,一个方块为中心的3x3的范围内的雷总数是这个方块的雷数,那么我们不可能以每个方块检测
方法是什么呢?就是反向检测
假设在坐标系上存在两个半径相同的圆,那么如果圆A的圆心在圆B中,圆B的圆心肯定就会在圆A中
同理,3x3的范围,相当于半径为根号2的圆所能扫到的范围,那么雷所能检测到的方块必然能检测到雷
3、空挡生成


原版扫雷还有一个规则,当你点开一个空白的时候,它会自动显示周围的空白
这个其实很好联想,我们可以用一个游戏:Pop Star(消灭星星)作为例子
Pop Star里同种颜色的方块可以互相消去,那么我们可以理解为“互相链接的同种方块消去”
那么链接的概念是什么呢?
由于方块只有四个边,所以对于方块而言,链接就是有一边重合
mc中,对于一个方块,与它链接的方块就能为r=1扫到(这里”方块“都是”ArmorStand“)
那么只要以所有显示的空白给四周的方块显示就行了
而至于老外的那个扫雷,思路和我的是相同的,只不过他用了fill replace,所以生成会更方便,而且实体多还会卡

@乙烯_中国
[groupid=546]Command Block Logic[/groupid]

2015-02-13_11.58.05.png (100.34 KB, 下载次数: 11)

扫雷.zip

286.21 KB, 下载次数: 28