本文主要分享连连看游戏核心算法
源码链接
https://gitee.com/bean_game/link
游戏分析

游戏消除逻辑
-
玩家点击两个方块,如果方块一样,且方块间的连线拐弯个数不超过2则认为可消除。
-
游戏消除代码处理方式:
- 首先把场上所有方格数据id存入二维数组,若点击的两个方块数据id相同则进行连线检测。
- 检测逻辑:两个方块上右下左平移到同一行或同一列,中间没有阻拦即认为连线拐弯个数不超过2。
- 收集两个方块上下左右可平移的位置的x、y坐标数组。
- 循环筛选出两数组中同x和同y的位置坐标。
- 如同x则判断在x轴上y1和y2之间是否存在其他方块,如不存在则判断为可消除。如同y则同理判断y轴上x1和x2之间的方块。
- 通过刚才检测可消除过程中得到的坐标数组可作为显示连线的坐标。
-
自动检测可消除方块组:
- 把上述的消除检测代码抽离出来,循环找出相同的方块进行消除检测,检测通过的即为可消除方块组。
游戏生成逻辑
-
把所有方块id数据打乱放入二维数组,检测是否存在可消除的即可。
-
(生成可解的棋局)循环检测二维数组进行消除,如遇到不可解时则打乱当前数据同时覆盖原有数据,直到消除所有方块,则当前棋局为可解棋局。
部分想法与疑问
-
该游戏如果同样的方块id数据想进行难度的控制要如果去生成与评估棋局?
-
想法:该游戏的核心为寻找可消除的相同方块。一般是先找到第一个方块,然后去找到相同的方块去思考是否可消除,那么是否可以把相同方块之间的距离作为评估难度的标准,比如有4个相同的方块,计算4个方块两两之间的距离然后平均得到一个值。依次类推循环所有类型的方块统计一个平均值,通过调整方块的位置来控制这个值是否就可以实现难度控制?