HarmonyOS应用开发实战:猫猫大作战-循环合并链的实现
·


前言
在「猫猫大作战」中,一次下落可能触发连锁合并——猫咪合并后等级提升,新等级的猫咪可能与相邻的同级猫咪再次合并,形成"合并链"。算法通过 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 篇将开启持久化篇章——棋盘放置与移除管理。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐

所有评论(0)