连连看游戏算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我们来看一级连接检验,就是检验两方块之间能 否直线连接,其必要条件之一就是两个块的横坐标 或纵坐标相等。
• 下面以横坐标为例(纵坐标的检验方法类 似 ),说明一级连接检验的算法:若横坐标 相等,则需要检验的是在y1和y2之间的这些 点中是否存在障碍物,这里可以用循环方法 检验.如果没有障碍物,则checkNoBarrier 马上返回true,函数马上退出.否则,需要进 入二级检验.
• 2 障碍物属性的存放位置 障碍物属性尽量不要用方块是否可见等外 观因素来确定,外观因素应该由内部变量决 定. 因为很可能,某天你要改成消方块只是 需要让方块变灰,那么你的内部检验代码要 修改,比较麻烦.尽量使用一个数组来存放这来自百度文库些属性.然后外观是另一套代码,这样便于维 护.
谢谢大家!
• 我们来采用逐级算法:先看能否直线连接, 若不行,再拐一个弯,再不行,继续拐弯.这也 符合一些游戏者玩游戏时判断连接的方法. • 这里,把检验连接是否成功定义为一个函数 checkNoBarrier(x1,y1,x2,y2),true表 示连接成功,false表示连接失败.所以,返回 true一般比返回false快.因为只要有一根折 线连上了,就可以退出函数.而false则要所 有尝试都失败了才能返回
• 如果都没有一个返回true的话,或者根本找 不到可以作一级检验的点对(特别是当某个 方块被障碍物紧紧包围的时候),那么三级检 验结果为false,此时,折线的折点数已经达 到2,根据游戏规则,此时checkNoBarrier 返回false了.
•至此逐级算法结束
两点注意的问题:
• 1 检验的先后顺序 • 在检验两个方块能否消掉的时候,我们要让 两个方块同时满足两个条件才行,就是两者 配对并且连线成功.其中,配对只需要用个 a+b==100就可以了,所以运算比检验连 接快很多.所以,这里应该先检验配对,如果 该条件不成立的话,就不要再进行连线检查 了,这样可以避免很多不必要的复杂运算.
连连看游戏算法
连连看游戏规则很简单,就是点中两 个互相匹配并且可以通过不多于两个 折点的折线连在一起的方块后,这两 个方块就可以消掉.
下图的三种情况可以把方块消掉.我们可以 假设,配对规则是两数相加等于100.
说明:配对的检查比较简单,只要用一个if 语句,条件a+b==100就可以检验了.而两 方块能否实现折线连接,则是个相对复杂的 问题.
注意其中的+1和-1的运算
• 该表达式返回true,那么checkNoBarrier 返回true.否则二级检验结果为false;要进 入三级检验
可以发现,所有的折线都有一个特点.两个折点分别跟两方块 的横坐标相等或纵坐标相等,因此,我们只需要对折线的中段 进行一级检验.至于折点的位置,就让两方块往四个方向走,走 到障碍物或者方阵边缘.于是,走过的点都有可能成为折线的 折点,在这些点里,看看哪些点对(点的组合)可以作一级检验.
• 注意::这里很容易忽略的一个情况就是 两个方块相邻.这时,y1与y2之间没有点.如 果不检验就会错误地跳到二级检验里去.为 了避免这种状况的出现,可以在循环之前,定 义一临时变量temp=true,然后才到循环语 句,遇到障碍物就让temp=false,并且跳出 循环.这时,对于相邻的情况来说,因为循环 次数为0,所以temp绝对为true. • 综上所述,temp=true,checkNoBarrier就 返回true,否则要进入二级检验.
• 二级检验(只有一个折点)在排除了一级 检验的条件后,对两方块的坐标关系没有要 求.所以,若横坐标或纵坐标相等,就直接进 入三级检验.
在上图中,红线由两线段组成,所以,这个检验 相当于两个一级检验结果的"且"运算.可见,一 级检验的方法可以用到这里.所以,把一级检验 定义为函数,在二级检验中,会方便很多.
• 把横坐标相等时的一级检验函数定义为 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) && heckx1(x1,x2+1,y1))
相关文档
最新文档