大概年前空闲时间写过一篇关于连连看算法的介绍,但是一直都没有时间来实现,大概花了3天时间,在android平台上实现了这么一个算法,证明是可行的,不过android第一次接触,写得很糟糕,看看就好了,算法大家可以自己体会下,也写出自己的连连看来,下面先来预览下程序吧。
游戏开始画面
游戏界面
消除画面1
路径描绘1
消除画面2
路径描绘2
消除画面3
路径描绘3
画面预览好了那直达主题来介绍下算法吧,我们都知道连连看的成功消除有三种情况,第一种是零转角的情况,既直线可达的情况,第二种是单一转角的情况,第三种是两次折角的情况,那我就来分别分析一下这三种情况,先从最简单的零折角情况开始。
在介绍这种情况之前让我们先看图:
我们通过上图可以知道直线情况应该分两种,一种是X同轴,一种是Y同轴,那在这种情况的处理之前,我们应该先判断是X同轴还是Y同轴,然后再比较不在同一轴上的值的大小,确定遍历方向,接下来就很简单了,顺着该方向遍历就可以了。
第二种情况-单一折角:
图中灰色代表两点所构成矩形的另外一对对角线,既起点与终点的其中一个坐标值互换,通过图我们可以猜想到如果为单一折角,则改折点必须与起点与终点有一个坐标值一致,所以这个折点必须是所构成矩形的另外一个个对角线的端点,找到这两点很简单,那下来的我们就可以在直线零折角的基础上判断这两点是否有一点与起点与终点都可达,如果可达则为单一折角的情况。
第三种情况-两次折角:
绿点表示需要遍历的点,从上图大家可以这样考虑吗,如果是两次折角的情况,那么首先第一个折角必须是与起点有一个坐标值相等,遍历是需要从起点出发,向X轴负方向,X轴正方向,Y轴负方向,Y轴正方向,分别遍历,遍历直到出现障碍物,此前当到达某一个坐标时,就触发第二种情况,既判断与终点是否是单一折角的情况(因为众多点都能与其构成矩形,所以需要这么大面积的遍历),如果可以则是第三种情况。
可以看到,其实二次折角是在一次折角基础上的,一次折角是在直线判断基础上的,这样就解决一个问题,最佳路径的问题,我们可以从0、1、2分别处理以此来找出最佳路径。
好了,介绍完了,顺带说一句,我的android刚学着用,写的很烂,大家要多动手,才有提高,希望这篇文章对大家有帮助,如果要资源可以找我所上传的网络资源,地址:http://download.csdn.net/source/3280064 ,你能写出自己的连连看游戏了么?:)