cocos2d-x 3.6 连连看算法

我的原创博客:http://blog.csdn.net/dawn_moon

好了,在开始讲连连看游戏场景之前先来讲讲连连看算法。

连连看算法网上有很多,算法控首先想到的就是广度优先搜索,求出路径,然后求最小拐弯路径。

这个算法可以,但是对没有学过算法的同学可能有点困难,我这里也不讲。

我百度到一个比较通俗简便的算法,拿来用一下

在开始讲算法之前,讲一下地图布局,假设 4*4 的棋盘。

  1. 初始化地图,将要加载的图片在地图上绘制出来,每一种一次性绘制两次,确保偶数个。如图一
  2. 遍历棋盘,随机打乱布局,这样就形成不规整的布局。如图二
  3. 棋盘最外边是不绘制图片的,但是也是一格地图,用来画最外边的连线。如图三

图一
图一
图二
这里写图片描述
图三
这里写图片描述

很容易想到,用一个二维数组来记录所有的位置,0表示空,非0表示有图标填充。那么初始化数组的时候,最外一圈是0,其余位置用图片序号就好了。

现在说说算法:
两个图标可以连接的条件是:
1. 图标相同。
2. 两个图标之间有一条通路相连,即路线上没有其他图标阻碍。
3. 这条路线不能有两个以上的拐角。

满足上面三个条件就是连通的,有三种情况:
1. 直线连,没有拐点。简单,两个图标在一条直线上,中间没有其他图标
2. 一折型,一个拐点。以两个选中的图标为对角顶点画矩形,其余两个顶点能够与两个选中的图标形成直线即可。连如图四
3. 二折型,两个拐点。横向和纵向扫描。如图五

  1. 横向扫描。选中的两个点横向扩展,如果没有遇到其他图标,一直扩展,直到遇到其他图标或者到达地图边缘。如果扩展后的路径,存在两个点,能与选中的两点形成直线连即可。
  2. 纵向扫描原理同横向扫描。

图四
这里写图片描述

图五
这里写图片描述 这里写图片描述 这里写图片描述

判断棋盘是否还有解和自动消除算发都是用这个来解。

这个算法是我在网上找的一个demo,安卓版java写的。然后我用cocos2d-x重写了一下,感觉还行。调试了半天,终于好了。

下一篇来讲具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值