Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 1971|回复: 15

[教程] 【TRP出品】【乙烯】小游戏[连连看]的核心原理分析

[复制链接]
发表于 2015-7-21 22:16:41 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 乙烯_中国 于 2016-3-20 18:03 编辑

  hello,大家好,我是乙烯。今天给大家带来的是我的连连看核心原理,希望大家喜欢。  此贴与【TRP出品】【乙烯】连连看【TRP出品】【乙烯】小游戏【扫雷】的具体原理分析两贴进行联动。
  本次地图仅为技术性地图,并非游戏地图,所以该地图仅为连连看这个游戏的核心系统。其余系统由于并不是特别难做,所以本贴概不详诉。
  说到连连看这种经典游戏,大家都不会陌生。那么我们来复述一下连连看的规则,其实很简单,就是连线不能拐超过两次的弯以及可以重新洗牌。其余倒是没什么特别的了。
一,思路分析。
  那么还是来按照一局连连看的思路来进行思路分析。首先我们需要一个可以供我们游戏的棋盘,在这个的基础上我们需要一个生成棋盘的开局系统,在成功生成棋局之后我们就需要正常的进行游戏,所以我们需要一个具体的游戏系统,而游戏系统最重要的就是判断所选择的两个棋子是否其能够构成有效解的问题。然后棋局结束的系统我并没有做,但是实际上只需要两三条指令就可以建立起这个系统,所以本次的讲解会详细的讲解连连看的有效解系统及连线处理,其余系统将会一笔带过
  那么我们现在来看看,我们所总结出来的思路,连连看的核心是判断有效解,并能够显示出条有效的路径反馈给玩家。
  那么我们要如何做到判断有效解呢,

二,开始建造。
首先我在这里说一下我的会提到的计分板,以免下文造成理解不便。

                               
登录/注册后可看大图

r惯例是右键探测,具体方式在扫雷贴里有说。
mark是棋子内容的存储计分板。
sc是拐点的标记计分板。
f1-6都是进行探索时所用到的计分板。
line1,line2,line5是标记路径的计分板。
kill和kill1是拐点进行探测另一拐点的时候所用到的计分板。


这里,我再声明一下计分板的作用,f1是第一个棋子的第一层探索,而f2是第二个的第一层探索,f5,f6为第一个棋子的第二层探索,f3,f4是第二个棋子的第二层探索。其中f5,6和f3,4用的是一套系统,我就只挑其一套来说。
好的,那么我们现在可以开始了。


                               
登录/注册后可看大图

下方的cb是探测右键的cb,比较器输出后会沿着箭头方向fill红石块,同时向前做出探测第二次右键的预备工作。fill我分成了两次依次执行了如下组的命令。

这对应之前思辨中的“探索未拐弯所能到达的格子”,原理是右键的格子向四个方向的所有格子进行标记,同时标记有数字记录其方向,然后由于不拐弯的情况下是不会越过有内容的格子的,所以所有的有内容的格子会朝他的那个方向清除标记,
已“起XXXOOXOO”为例,“起”为选择的格子,X为空格,O为有内容的格子,第一个O会受到exe的影响,清除其右边所有的格子的标记,以此类推,下图是实际的标记效果。




                               
登录/注册后可看大图

代码可以看做这样的处理办法。

                               
登录/注册后可看大图

其次则会激发下一次的fill,执行以下指令。
此组命令与上组功能类似,注意,由于可能对一个格子进行两个方向的探测,所以我这里横向和竖向采取的是两个计分板。
这是第二组的效果图。

                               
登录/注册后可看大图

注意,这里其实是两个计分板,所以为了方便下方的计算,我们需要将其并为一个计分板,所以沿线路你们能看到以下类似指令。
其中f3,4并为kill,f5,6并为kill1。图中绿色和橙色方块最终会处理成一种方块。

                               
登录/注册后可看大图



  1. /scoreboard players set @e[score_f5_min=1] kill1 1
复制代码

那么接下来你会看到这部分的电路,

                               
登录/注册后可看大图


这里执行的指令我会依次解释。
  1. scoreboard players set @e[score_f1_min=1,score_f2_min=1,c=1] sc 5
复制代码
这条指令是探测只有一次拐弯的情况,标记唯一一个拐点为5,注意,这里有一个c=1的选择器,这样可以确保唯一路径,下文同理。
  1. execute @e[score_r=1,score_r_min=1] ~ ~ ~ scoreboard players set @e[score_kill_min=1,score_f1_min=1,c=1] sc 2
复制代码
这条指令是探索两次拐弯的情况,同时标记第一个拐点。
  1. execute @e[score_sc=5,score_sc_min=5] ~ ~ ~ scoreboard players set @e[score_sc_min=1,score_sc=4] sc 0
复制代码
这里是分类情况,所有的连连看都有三种情况,一次拐弯,两次,或者不拐弯。不拐弯的情况其实可以忽略,因为总会被处理为一次拐弯的情况,而一旦有了一次拐弯的情况就不会再处理两次拐弯的情况,以获取最佳路径。
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame,score_kill1_min=1,score_f2_min=1] cut 1
复制代码
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[dx=10,dy=0,type=ItemFrame,score_kill1_min=1,score_f2_min=1] cut 1
复制代码
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[dx=0,dy=-10,type=ItemFrame,score_kill1_min=1,score_f2_min=1] cut 1
复制代码
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[dx=-10,dy=0,type=ItemFrame,score_kill1_min=1,score_f2_min=1] cut 1
复制代码
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[c=1] cut 0
复制代码
这一组指令的作用实际上是第一个拐点寻找其对应的第二个拐点,原理与前文相似,是十字形探索。
  1. execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[score_cut=1,score_cut_min=1,c=1] sc 3
复制代码
这是标记第二个拐点的指令。

                               
登录/注册后可看大图

最后这里就是标记路径的指令,其工作原理与第一次探索相同,但略微有点区别。
  1. execute @e[score_r=2,score_r_min=2] ~ ~ ~ execute @e[dx=0,dy=-10,score_sc=3,score_sc_min=3] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame] line2 1
复制代码
唯一的区别是前方加了一个exe的嵌套,这样能够限制住方向,只有这个方向有可以连接的另一个拐点,才会往这个方向探索。


最后我们只需要将带有line1-5的计分板的展示框exe再执行一个粒子指令就好。
  1. execute @e[score_line1_min=1,score_line1=4] ~ ~ ~0.2 /particle barrier ~ ~ ~ 0 0 0 1 1 1
复制代码

好的,今天就讲到这里,如有不足的地方可以联系我我再补充。






评分

参与人数 16人气 +32 金粒 +387 金锭 +2 贡献 +4 收起 理由
gao-ji + 1 图挂了......
PotatoMaster101 + 2 + 26 + 1 PM大帝到此一游
1127193030 + 1 + 20 大触我们做朋友吧!
F空 + 1 好高端...
ghyzhi10086 + 2 + 35 楼主你太帅了~
PTmissionary + 4 + 1 广告机!
PpY_SK + 2 + 35 很棒的作品!
jianghr + 60 + 3 好评,不过还要再修下
ufof + 3 + 25 Mcbbs有你更精彩~
FHC红石 + 3 + 25 吓的我都看不懂了
lzs1234 + 2 + 22 然而并没有全部听懂…
scorpio975 + 2 + 25 很棒的作品!
GTVZDH123 + 3 + 25 我讨厌你没事就来收膝盖
719823597 + 4 + 50 + 1 Ssssssssssssssssssss
MsYqgzt + 2 + 23 很棒的作品!
huang023 + 1 + 15 怎么可以不加分呢?

查看全部评分

回复

使用道具 举报

发表于 2015-7-21 22:22:47 | 显示全部楼层
乙烯大大,不分页真的好么QAQ
回复

使用道具 举报

发表于 2015-7-21 22:25:33 | 显示全部楼层
这...这...难道就是神 我看到图都很吃惊!
回复

使用道具 举报

发表于 2015-7-21 22:25:50 | 显示全部楼层
为什么感觉那么像扫雷

点评

数字版的连连看,不然的话不好弄  详情 回复 发表于 2015-7-21 22:29
回复

使用道具 举报

发表于 2015-7-21 22:29:34 | 显示全部楼层
魔末 发表于 2015-7-21 22:25
为什么感觉那么像扫雷

数字版的连连看,不然的话不好弄
回复

使用道具 举报

发表于 2015-7-21 22:29:38 | 显示全部楼层
看到计分板就烦……什么时候去学学……缩减线路的神器……
回复

使用道具 举报

发表于 2015-7-21 22:32:11 | 显示全部楼层
我来支持了233
回复

使用道具 举报

发表于 2015-7-21 22:44:37 | 显示全部楼层
火钳刘明

评分

参与人数 1人气 -1 金粒 -10 收起 理由
贰逼 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2015-7-21 23:10:47 | 显示全部楼层
牛人牛人牛人!!!!
回复

使用道具 举报

发表于 2015-7-21 23:18:46 | 显示全部楼层
吓死人 尼玛看不懂
回复

使用道具 举报

发表于 2015-7-22 00:25:52 | 显示全部楼层
好深奥看不懂
回复

使用道具 举报

发表于 2015-7-22 06:07:39 | 显示全部楼层
这么复杂,我宁愿直接玩连连看
回复

使用道具 举报

发表于 2015-7-22 06:10:09 来自手机 | 显示全部楼层
解说好评,我看了下,不过没有时间上机验证了。你的思路应该是A点2轮检索,B点1轮检索,然后选择器找点描线的思路。
有以下几个问题:
检索方式为先标记后取消有值者的方式,那么会带来标记"跳格"的问题,问你是怎么解决的。
f4的作用是什么?你这里没说。从前后结构推测其可能是f56对f2共检测的一个记分板,作用是标记A2轮检索和B1轮检索的交集,但是这里解说你貌似漏了。
后面对我来说看懂倒不是问题。不过楼上不明觉厉的也太多了。

行文设计的一些:
你这个还是没和作品帖标双向链接。
你这个结构很多的细节基础是扫雷帖,你这也要加上链接,不是所有人都会去手找的。
变量的选名可读性还是差了点,3个月后你自己都不一定想的起来哪个对哪个。不过现在CB程序设计环境还是没有IDE的MOD,写复杂了还是要自己手打,也蛮蛋疼的。

综上,先评分高亮,精我等修好了。chyx也出货了,不知他的思路是什么。

评分

参与人数 2人气 +3 金粒 +35 收起 理由
chyx + 1 你还没看我的
PpY_SK + 2 + 35 围观大春卷

查看全部评分

回复

使用道具 举报

发表于 2015-7-22 17:44:49 | 显示全部楼层
我只是过来冒个泡的(什么都看不懂好么
你看看上面那位大触,我还发现了隐藏的度度,,
回复

使用道具 举报

发表于 2015-7-22 19:20:18 | 显示全部楼层
指令量不是我等凡人能及的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-12-18 16:46 , Processed in 0.101837 second(s), 14 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表