我的世界小游戏连连看地图核心原理解析

时间:2017-06-13 来源:88130安卓下载 作者:佚名

  我的世界小游戏连连看地图核心原理解析。那在之前游戏园小编和大家分享过我的世界1.8数字连连看游戏地图下载。那今天就给大家将这个小游戏的核心原理介绍一下吧!看看制作一个这样的游戏地图的流程又是什么吧!

  说到连连看这种经典游戏,大家都不会陌生。那么我们来复述一下连连看的规则,其实很简单,就是连线不能拐超过两次的弯以及可以重新洗牌。其余倒是没什么特别的了。

  一、思路分析

  那么还是来按照一局连连看的思路来进行思路分析。首先我们需要一个可以供我们游戏的棋盘,在这个的基础上我们需要一个生成棋盘的开局系统,在成功生成棋局之后我们就需要正常的进行游戏,所以我们需要一个具体的游戏系统,而游戏系统最重要的就是判断所选择的两个棋子是否其能够构成有效解的问题。然后棋局结束的系统我并没有做,但是实际上只需要两三条指令就可以建立起这个系统,所以本次的讲解会详细的讲解连连看的有效解系统及连线处理,其余系统将会一笔带过。

  那么我们现在来看看,我们所总结出来的思路,连连看的核心是判断有效解,并能够显示出一条有效的路径反馈给玩家。

  那么我们要如何做到判断有效解呢,

  我们可以这样的反向思考,以第一个棋子为基点,探索在两次拐弯所能够到达的地方,如果有第二个被选择的棋子且其内容相同,则为"有解"。那么我们借以反向思考所给定的基础进行正向的推演,首先我们可以确信一点,第一个被选择的棋子向外探测没有拐弯的格子是非常容易的事,仅需十字形探测。其次,我们可以知道,这些格子都有成为第一个拐点的可能性,那么我们再以这些格子为基础,向外探测进行下一次的探测,以此类推完成两次拐弯的推演。那么最后只需要判断第二个棋子是否在这个范围里,我们就可以判断这个是是否有解的。但是这样的思路有个致命的缺点,就是比较难输出一条有效的路径,并不是不可行,但是这意味着还得反向的去探测一次,那么这是非常不环保的行为,又慢又卡,我们得进行一次权衡,减少一次第一个的探索深度,将其加到第二层次的探索中,那么我们可以清楚的知道,两次探索的重叠位置可能是一个拐点(或者非拐点,例如直线情况)。在实际的实践中,我发现这种情况虽然能够较快的输出有解,但对于路径的选择仍然少了一个可能的拐点。于是,现在的思路就变成了:两个棋子各进行深度为二的搜索,两个覆盖范围就为其可能的拐点。好的,那么接下来只差一步了,我们需要选择一条唯一的路径,最好是最短的,正好关于最近的选择我们有一个c=1的选择器可以做到,通过这次的记录,我们便可以做到选择一条唯一的道路,虽然不一定是最近的,但绝对不会远到离谱,而且消耗资源相当少。剩下的我们只需要标记出这些被选择的拐点,然后做出对应的路径。

  二、开始建造

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

  r惯例是右键探测,具体方式在扫雷贴里有说。

  mark是棋子内容的存储计分板。

  sc是拐点的标记计分板。

  f1-6都是进行探索时所用到的计分板。

  line1,line2,line5是标记路径的计分板。

  kill和kill1是拐点进行探测另一拐点的时候所用到的计分板。

  好的,那么我们现在可以开始了。

  我的世界小游戏连连看地图核心原理解析。那在之前游戏园小编和大家分享过我的世界1.8数字连连看游戏地图下载。那今天就给大家将这个小游戏的核心原理介绍一下吧!看看制作一个这样的游戏地图的流程又是什么吧!

  说到连连看这种经典游戏,大家都不会陌生。那么我们来复述一下连连看的规则,其实很简单,就是连线不能拐超过两次的弯以及可以重新洗牌。其余倒是没什么特别的了。

  一、思路分析

  那么还是来按照一局连连看的思路来进行思路分析。首先我们需要一个可以供我们游戏的棋盘,在这个的基础上我们需要一个生成棋盘的开局系统,在成功生成棋局之后我们就需要正常的进行游戏,所以我们需要一个具体的游戏系统,而游戏系统最重要的就是判断所选择的两个棋子是否其能够构成有效解的问题。然后棋局结束的系统我并没有做,但是实际上只需要两三条指令就可以建立起这个系统,所以本次的讲解会详细的讲解连连看的有效解系统及连线处理,其余系统将会一笔带过。

  那么我们现在来看看,我们所总结出来的思路,连连看的核心是判断有效解,并能够显示出一条有效的路径反馈给玩家。

  那么我们要如何做到判断有效解呢,

  我们可以这样的反向思考,以第一个棋子为基点,探索在两次拐弯所能够到达的地方,如果有第二个被选择的棋子且其内容相同,则为"有解"。那么我们借以反向思考所给定的基础进行正向的推演,首先我们可以确信一点,第一个被选择的棋子向外探测没有拐弯的格子是非常容易的事,仅需十字形探测。其次,我们可以知道,这些格子都有成为第一个拐点的可能性,那么我们再以这些格子为基础,向外探测进行下一次的探测,以此类推完成两次拐弯的推演。那么最后只需要判断第二个棋子是否在这个范围里,我们就可以判断这个是是否有解的。但是这样的思路有个致命的缺点,就是比较难输出一条有效的路径,并不是不可行,但是这意味着还得反向的去探测一次,那么这是非常不环保的行为,又慢又卡,我们得进行一次权衡,减少一次第一个的探索深度,将其加到第二层次的探索中,那么我们可以清楚的知道,两次探索的重叠位置可能是一个拐点(或者非拐点,例如直线情况)。在实际的实践中,我发现这种情况虽然能够较快的输出有解,但对于路径的选择仍然少了一个可能的拐点。于是,现在的思路就变成了:两个棋子各进行深度为二的搜索,两个覆盖范围就为其可能的拐点。好的,那么接下来只差一步了,我们需要选择一条唯一的路径,最好是最短的,正好关于最近的选择我们有一个c=1的选择器可以做到,通过这次的记录,我们便可以做到选择一条唯一的道路,虽然不一定是最近的,但绝对不会远到离谱,而且消耗资源相当少。剩下的我们只需要标记出这些被选择的拐点,然后做出对应的路径。

  二、开始建造

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

  r惯例是右键探测,具体方式在扫雷贴里有说。

  mark是棋子内容的存储计分板。

  sc是拐点的标记计分板。

  f1-6都是进行探索时所用到的计分板。

  line1,line2,line5是标记路径的计分板。

  kill和kill1是拐点进行探测另一拐点的时候所用到的计分板。

  好的,那么我们现在可以开始了。

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

  execute @e[score_r=1,score_r_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame] f1 1

  execute @e[score_r=1,score_r_min=1] ~ ~ ~ /scoreboard players set @e[dx=10,dy=0,type=ItemFrame] f1 2

  execute @e[score_r=1,score_r_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=-10,type=ItemFrame] f1 3

  execute @e[score_r=1,score_r_min=1] ~ ~ ~ /scoreboard players set @e[dx=-10,dy=0,type=ItemFrame] f1 4

  /scoreboard players set @e[score_r=1,score_r_min=1] f1 10000

  execute @e[score_f1=1,score_f1_min=1,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame] f1 0

  execute @e[score_f1=2,score_f1_min=2,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=10,dy=0,type=ItemFrame] f1 0

  execute @e[score_f1=3,score_f1_min=3,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=-10,type=ItemFrame] f1 0

  execute @e[score_f1=4,score_f1_min=4,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=-10,dy=0,type=ItemFrame] f1 0

  这对应之前思辨中的“探索未拐弯所能到达的格子”,原理是右键的格子向四个方向的所有格子进行标记,同时标记有数字记录其方向,然后由于不拐弯的情况下是不会越过有内容的格子的,所以所有的有内容的格子会朝他的那个方向清楚标记,下图是实际的标记效果。

  其次则会激发下一次的fill,执行以下指令。

  execute @e[score_f1=4,score_f1_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame] f5 1

  execute @e[score_f1=4,score_f1_min=1] ~ ~ ~ /scoreboard players set @e[dx=10,dy=0,type=ItemFrame] f6 2

  execute @e[score_f1=4,score_f1_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=-10,type=ItemFrame] f5 3

  execute @e[score_f1=4,score_f1_min=1] ~ ~ ~ /scoreboard players set @e[dx=-10,dy=0,type=ItemFrame] f6 4

  /scoreboard players set @e[score_f1=4,score_f1_min=1] f5 10000

  /scoreboard players set @e[score_f1=4,score_f1_min=1] f6 10000

  execute @e[score_f5=1,score_f5_min=1,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=10,type=ItemFrame] f5 0

  execute @e[score_f6=2,score_f6_min=2,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=10,dy=0,type=ItemFrame] f6 0

  execute @e[score_f5=3,score_f5_min=3,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=0,dy=-10,type=ItemFrame] f5 0

  execute @e[score_f6=4,score_f6_min=4,score_mark=8,score_mark_min=1] ~ ~ ~ /scoreboard players set @e[dx=-10,dy=0,type=ItemFrame] f6 0

  此组命令与上组功能类似,注意,由于可能对一个格子进行两个方向的探测,所以我这里横向和竖向采取的是两个计分板。

  这是第二组的效果图。

  注意,这里其实是两个计分板,所以为了方便下方的计算,我们需要将其并为一个计分板,所以沿线路你们能看到以下类似指令。

  /scoreboard players set @e[score_f4_min=1] kill 1

  那么这里,我再声明一下计分板的作用,f1是第一个棋子的第一层探索,而f2是第二个的第一层探索。

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

  这里执行的指令我会依次解释。

  scoreboard players set @e[score_f1_min=1,score_f2_min=1,c=1] sc 5

  这条指令是探测只有一次拐弯的情况,标记唯一一个拐点为5,注意,这里有一个c=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

  这条指令是探索两次拐弯的情况,同时标记第一个拐点。

  execute @e[score_sc=5,score_sc_min=5] ~ ~ ~ scoreboard players set @e[score_sc_min=1,score_sc=4] sc 0

  这里是分类情况,所有的连连看都有三种情况,一次拐弯,两次,或者不拐弯。不拐弯的情况其实可以忽略,因为总会被处理为一次拐弯的情况,而一旦有了一次拐弯的情况就不会再处理两次拐弯的情况,以获取最佳路径。

  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

  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

  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

  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

  execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[c=1] cut 0

  这一组指令的作用实际上是第一个拐点寻找其对应的第二个拐点,原理与前文相似,是十字形探索。

  execute @e[score_sc=2,score_sc_min=2] ~ ~ ~ /scoreboard players set @e[score_cut=1,score_cut_min=1,c=1] sc 3

  这是标记第二个拐点的指令。

  最后这里就是标记路径的指令,其工作原理与第一次探索相同,但略微有点区别。

  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再执行一个粒子指令就好。

  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

  PS:在此非常感谢我的世界玩家乙烯的分享。

  以上就是我的世界电影来袭 电影导演的透露。更多精彩尽在游戏园我的世界专区。

  热门攻略推荐:

  我的世界命令方块制作的记忆游戏教程及存档简介

  红石巨作 我的世界勇敢者的游戏地图玩法解析

  我的世界1.7.x勇敢者的游戏地图下载

  tellraw指令应用小技巧 游戏中的tellraw指令解析

热门搜索

手游排行榜

  • 最新排行
  • 最热排行
  • 评分最高