快速业务通道

Flash小游戏-连连看算法大揭密

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08
述,temp=true,checkNoBarrier就返回true,否则要进入二级检验.
二级连接检验
一级检验后,发现两方块无法通过直线连接起来,便尝试一个折点的折线能否把两个方块连接起来,这就是二级检验.
二级检验在排除了一级检验的条件后,对两方块的坐标关系没有要求.所以,若横坐标或纵坐标相等,就直接进入三级检验.
图10中,如果要让图中的两黄方块成功实现二级连接,必须且只需让红线或蓝线经过的地方没有障碍物.

在图10中,红线由两线段组成,所以,这个检验相当于两个一级检验结果的"且"运算.可见,一级检验的方法可以用到这里.所以,把一级检验定义为函数,在二级检验中,会方便很多.
把横坐标相等时的一级检验函数定义为checky1(x,y1,y2),把纵坐标相等时的一级检验函数定义为checkx1(x1,x2,y)
那么,检验红线的结果将由如下表达式决定:
(checky1(x1,y1,y2+1) && checkx1(x1-1,x2,y2))
该表达式返回true,那么checkNoBarrier就返回true,否则检验蓝线能否连接:
(checky1(x2,y1-1,y2) && checkx1(x1,x2+1,y1))
希望读者注意到其中的加一和减一运算.这个问题很容易被忽略.至于为什么,请读者细心观察一级检验中要检验的点的分布特征.
该表达式返回true,那么checkNoBarrier返回true.否则二级检验结果为false;要进入三级检验
因此,以下表达式的真假决定是否不需要进入三级检验.
(checky1(x1,y1,y2+1) && checkx1(x1-1,x2,y2)) || (checky1(x2,y1-1,y2) && checkx1(x1,x2+1,y1))
图10中两绿块的分析方法类似.
三级连接检验
过两方块,折点数为2的折线有很多条,如果像二级检验那样直接分解为一级检验,循环次数还是比较多的,并且需要多次读取某个点(比如图11中的红线跟蓝线就要重复读三个点,即黄色标记的部分).所以,从方块出发的一级检验用其它方法替代.

可以发现,所有的折线都有一个特点.两个折点分别跟两方块的横坐标相等或纵坐标相等

因此,我们只需要对折线的中段进行一级检验.至于折点的位置,就让两方块往四个方向走,走到障碍物或者方阵边缘.于是,走过的点都有可能成为折线的折点,在这些点里,看看哪些点对(点的组合)可以作一级检验.
在图13中,以下点对可以作一级检验,只要有一个返回true,checkNoBarrier就返回true.
(0,7),(0,9)
(1,7),(1,9)
(2,10),(3,10)

如果都没有一个返回true的话,或者根本找不到可以作一级检验的点对(特别是当某个方块被障碍物紧紧包围的时候),那么三级检验结果为false,此时,折线的折点数已经达到2,根据游戏规则,此时checkNoBarrier返回false了.
如果觉得三级检验分两步麻烦,希望直接使用一级检验的话,也可以.
就把以下所有点对都检验就可以了(见图13).
(n,7),(n,9)
(2,m),(3,m)
其中,n为0~12的整数,m为0~10的整数.
这样代码可以简化,但由于一级检验本身就是循环,如果这里用这个办法的话,就要嵌套上一个更大的循环,运行效率不高,故这里还是不推荐用此法.
至此,连线算法已经介绍完毕.希望通过这个过程,大家可以从中悟出方块类游戏算法的一般思想.
至于该游戏的其它细节问题,在这里也稍微提一下.
1 检验的先后顺序
在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功.其中,配对只需要用个a+b==100就可以了,所以运算比检验连接快很多.所以,这里应该先检验配对,如果该条件不成立的话,就不要再进行连线检查了,这样可以避免很多不必要的复杂运算.当然,如果你在做这个游戏的时候,配对规则不像笔者的如此简单的话,那么就看哪个算起来麻烦就把它放在后面.
2 障碍物属性的存放位置
障碍物属性尽量不要用方块是否可见等外观因素来确定,外观因素应该由内部变量决定.
因为很可能,某天你要改成消方块只是需要让方块变灰,那么你的内部检验代码要修改,比较麻烦.尽量使用一个数组来存放这些属性.然

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号