文章配图:循环合并链的实现

页面预览

前言

在「猫猫大作战」中,一次下落可能触发连锁合并——猫咪合并后等级提升,新等级的猫咪可能与相邻的同级猫咪再次合并,形成"合并链"。算法通过 while 循环反复扫描全盘,直到没有新的合并发生。

本文以 GameEngine.checkAllMerges() 为锚点,讲解循环合并链的实现。

提示:本系列不讲 ArkTS 基础语法与环境搭建,假设你已跟完第 1–129 篇。本篇是阶段四第 130 篇。

一、循环合并算法

1.1 核心代码

private checkAllMerges() {
  let merged = true;
  while (merged) {
    merged = false;
    for (let y = GameConfig.BOARD_HEIGHT - 1; y >= 0; y--) {
      for (let x = 0; x < GameConfig.BOARD_WIDTH; x++) {
        const cat = this.board[y][x];
        if (cat && !cat.falling && cat.level < CatLevel.LEGENDARY) {
          if (this.tryMergeAt(x, y)) {
            merged = true;  // 发生了合并,继续下一轮扫描
          }
        }
      }
    }
  }
}

1.2 连锁反应示例

初始:  合并 SMALL → MEDIUM    新 MEDIUM 与邻居合并
[A][A]  → [B][ ]   →  [B][B]  →  [C][ ]
↓ 初始化合并       ↓ 合并后再检查  ↓ 连锁合并

二、while merged 循环

轮次 操作 merged
1 扫描全盘,找到 SMALL+SMALL 合并 true
2 新生的 MEDIUM 与相邻 MEDIUM 合并 true
3 新生的 LARGE 无相邻同级 false → 结束

三、总结

while 循环配合 merged 标志位实现自动连锁合并,一次下落触发多次合并升级。

核心要点

  • while (merged) 循环直到无更多合并
  • 从底部向上扫描,确保合并后立即检测
  • cat.level < CatLevel.LEGENDARY 限制最终等级

下一篇预告:第 131 篇将开启持久化篇章——棋盘放置与移除管理。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐