我的原创博客:http://blog.csdn.net/dawn_moon
好了,在开始讲连连看游戏场景之前先来讲讲连连看算法。
连连看算法网上有很多,算法控首先想到的就是广度优先搜索,求出路径,然后求最小拐弯路径。
这个算法可以,但是对没有学过算法的同学可能有点困难,我这里也不讲。
我百度到一个比较通俗简便的算法,拿来用一下
在开始讲算法之前,讲一下地图布局,假设 4*4 的棋盘。
- 初始化地图,将要加载的图片在地图上绘制出来,每一种一次性绘制两次,确保偶数个。如图一
- 遍历棋盘,随机打乱布局,这样就形成不规整的布局。如图二
- 棋盘最外边是不绘制图片的,但是也是一格地图,用来画最外边的连线。如图三
图一
图二
图三
很容易想到,用一个二维数组来记录所有的位置,0表示空,非0表示有图标填充。那么初始化数组的时候,最外一圈是0,其余位置用图片序号就好了。
现在说说算法:
两个图标可以连接的条件是:
1. 图标相同。
2. 两个图标之间有一条通路相连,即路线上没有其他图标阻碍。
3. 这条路线不能有两个以上的拐角。
满足上面三个条件就是连通的,有三种情况:
1. 直线连,没有拐点。简单,两个图标在一条直线上,中间没有其他图标
2. 一折型,一个拐点。以两个选中的图标为对角顶点画矩形,其余两个顶点能够与两个选中的图标形成直线即可。连如图四
3. 二折型,两个拐点。横向和纵向扫描。如图五
- 横向扫描。选中的两个点横向扩展,如果没有遇到其他图标,一直扩展,直到遇到其他图标或者到达地图边缘。如果扩展后的路径,存在两个点,能与选中的两点形成直线连即可。
- 纵向扫描原理同横向扫描。
图四
图五
判断棋盘是否还有解和自动消除算发都是用这个来解。
这个算法是我在网上找的一个demo,安卓版java写的。然后我用cocos2d-x重写了一下,感觉还行。调试了半天,终于好了。
下一篇来讲具体实现。