
前言在「猫猫大作战」中当三只同级猫咪合并为一只高级猫后新猫可能与周围的同级猫再次触发合并——这就是循环合并链。递归合并是本游戏的核心爽感来源之一一次投放可能触发 3-5 次连锁合并。一、递归合并实现privatetryMergeAt(x:number,y:number):boolean{constcatthis.board[y][x];if(!cat||cat.falling)returnfalse;constneighborsthis.findSameLevelNeighbors(x,y,cat.level);if(neighbors.length2)returnfalse;// 1. 移除三只同级猫constcatsToRemove[{x,y},...neighbors.slice(0,2)];this.removeCats(catsToRemove);// 2. 升级constnewLevelcat.level1;this.createCatAt(x,y,newLevel);// 3. 计分this.scorethis.calculateMergeScore(cat.level,this.combo.multiplier);// 4. 递归检测if(this.tryMergeAt(x,y)){console.info(递归合并继续: (${x},${y}) 升级到${newLevel1});}returntrue;}二、链式合并示例投放前 (2,3): Lv.1 (2,4): Lv.1 (2,5): Lv.1 (2,6): Lv.2 (2,7): Lv.2 投放 Lv.1 到 (2,3) → 合并 Lv.1×3 → Lv.2新猫在 (2,4) ↓ 递归 Lv.2 与 (2,6)(2,7) 合并 → Lv.3新猫在 (2,5) ↓ 得分: 10 30 40无连击 或: 10 60 702s 内连击 2x三、性能控制privatereadonlyMAX_CHAIN10;// 防止无限递归privatetryMergeAtWithLimit(x:number,y:number,depth:number0):boolean{if(depththis.MAX_CHAIN){console.warn(合并链超限强制终止);returnfalse;}// ... 合并逻辑 ...returnthis.tryMergeAtWithLimit(x,y,depth1);}参数值说明MAX_CHAIN10最大递归深度触发条件每次合并后检测新位置级联结束条件无同级相邻猫或超限终止四、得分累积// 链式合并的得分每次合并独立计分受连击倍率影响// Lv.1→Lv.2: 10 × combo// Lv.2→Lv.3: 30 × combo// Lv.3→Lv.4: 90 × combo// ...// 如果链式合并 4 次1→5且全程 5x 连击// (103090270) × 5 2000 分五、最佳实践递归深度限制防止无限递归每次合并独立计分链中每次合并都受连击倍率影响移除后再创建先移除旧猫再创建新猫避免干扰检测动画分离合并动画与逻辑分离动画异步播放总结循环合并链通过递归实现级联合并一次投放可能触发多次升级。核心要点递归调用tryMergeAt、MAX_CHAIN限制深度、 每次合并独立计分、 移除→创建→递归三步。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源GameEngine 源码第 129 篇score-formula第 131 篇place-remove第 132 篇game-over