算法分析:
游戏规则:连连看是一个非常简单的游戏,就是在一个矩阵里找两个相同的方块,如果两个方块能够在不超过两次路径转弯下相连,就消去它们,消完为止.
游戏大致设计思路:
- 主场景为一个矩阵,一般是用一个二维数组. 如果值为0,表示为空白;其它的值,每个值表示一种方块.
- 由于此游戏是用鼠标操作,而行为也十分简单,就是点击第一个方块,再点击第二个方块,程序就根据两次点击判断是否可连.我们就可以把每次鼠标按下的那个方块写成一个类Target.这个类封装了它的信息:坐标,类型.然后还有一些针对它的方法,例如判断是否和其它Target类相连等.
判断是否相连,或许是这个游戏的主要算法了.我用的是这种方法.
Target类里放入一个Vector里面封装鼠标点击的这个点可以到达的所有点(Point类),当然还可以有和另一个点的转折点等,以便画两方块的连线.可以到达的点,就是从这个点开始按x,y相对于这个点向前和向后搜索,如果数组值为0,就向Vector加入这个点.点了第二次后,产生第二个Target类,同样,先找到它可以到达的所有的点,然后再执行它的 boolean canLine(Target tg)方法.
当两个目标类都找到了这些点的时候,可以进行判断了:
1.如果这两个目标是挨着的,返回true.
2.如果这两个目标类有共同的可以到达的点(路线只转一次弯),返回true;
3.如果两个目标类可以到达的点里,有两点可以以直线相连(路线转两次弯),记下这两点(它们就是转折点),返回true;
大致算法就这样,具体可以看我的程序. 下载
-------------------------------------------------
今天我又发现一种新的算法,这种算法可能是通用的算法,就是当我们点第一个方块的时候,遍历数组,找出所有和这个方块一样的方块,然后再判断它们.这是我在Linux里的连连看里学到的.呵呵.因为它有这个功能.高兴啊.呵呵.