连连看游戏核心算法分享

本文主要分享连连看游戏核心算法

源码链接

https://gitee.com/bean_game/link

游戏分析

Snipaste_2025-08-21_15-02-25

游戏消除逻辑

  • 玩家点击两个方块,如果方块一样,且方块间的连线拐弯个数不超过2则认为可消除。

  • 游戏消除代码处理方式:

    • 首先把场上所有方格数据id存入二维数组,若点击的两个方块数据id相同则进行连线检测。
    • 检测逻辑:两个方块上右下左平移到同一行或同一列,中间没有阻拦即认为连线拐弯个数不超过2。
      • 收集两个方块上下左右可平移的位置的x、y坐标数组。
      • 循环筛选出两数组中同x和同y的位置坐标。
      • 如同x则判断在x轴上y1和y2之间是否存在其他方块,如不存在则判断为可消除。如同y则同理判断y轴上x1和x2之间的方块。
    • 通过刚才检测可消除过程中得到的坐标数组可作为显示连线的坐标。
  • 自动检测可消除方块组:

    • 把上述的消除检测代码抽离出来,循环找出相同的方块进行消除检测,检测通过的即为可消除方块组。

游戏生成逻辑

  • 把所有方块id数据打乱放入二维数组,检测是否存在可消除的即可。

  • (生成可解的棋局)循环检测二维数组进行消除,如遇到不可解时则打乱当前数据同时覆盖原有数据,直到消除所有方块,则当前棋局为可解棋局。

部分想法与疑问

  • 该游戏如果同样的方块id数据想进行难度的控制要如果去生成与评估棋局?

  • 想法:该游戏的核心为寻找可消除的相同方块。一般是先找到第一个方块,然后去找到相同的方块去思考是否可消除,那么是否可以把相同方块之间的距离作为评估难度的标准,比如有4个相同的方块,计算4个方块两两之间的距离然后平均得到一个值。依次类推循环所有类型的方块统计一个平均值,通过调整方块的位置来控制这个值是否就可以实现难度控制?

5赞

难度影响因素:

  1. 关卡尺寸
  2. 元素种类
  3. 匹配元素距离、转折数量
    比如:简单、中等、困难三种难度,前两种因素很好处理,第三种比较麻烦,因为一个元素可能有多对可以匹配,只能算个大概。
    稍微切换思维,第三种难度控制,元素全部两两相邻放好,然后随机打乱x次(难度参数1),每次挑选随机数量n次(难度参数2)进行打乱。
    注意打乱时需要检测,不要生成对位的死局就行。