前言
在「猫猫大作战」中,放置和移除是棋盘管理的基础操作——猫咪下落到底部时放置到棋盘格子上,合并时移除被合并的猫咪。这两个方法维护board[][]和Map的一致性。
本文以GameEngine.placeCatOnBoard()和removeCat()为锚点,讲解棋盘状态的增删管理。
提示:本系列不讲 ArkTS 基础语法与环境搭建,假设你已跟完第 1–130 篇。本篇是阶段四第 131 篇。
一、放置与移除
1.1 放置猫咪
private placeCatOnBoard(cat: Cat) { if (cat.y >= 0 && cat.y < GameConfig.BOARD_HEIGHT && cat.x >= 0 && cat.x < GameConfig.BOARD_WIDTH) { this.board[cat.y][cat.x] = cat; } }1.2 移除猫咪
private removeCat(cat: Cat) { this.cats.delete(cat.id); if (cat.y >= 0 && cat.y < GameConfig.BOARD_HEIGHT && cat.x >= 0 && cat.x < GameConfig.BOARD_WIDTH && this.board[cat.y][cat.x]?.id === cat.id) { this.board[cat.y][cat.x] = null; } }二、双重维护
| 操作 | board[][] | Map |
|---|---|---|
| 放置 | board[y][x] = cat | 已在 Map 中(dropCat 时已 add) |
| 移除 | board[y][x] = null | cats.delete(cat.id) |
| 查询 | board[y][x]碰撞检测 | cats.get(id)按 ID 查找 |
三、总结
棋盘使用 board 和 Map 双重数据结构,board 用于位置查询,Map 用于 ID 查找。
核心要点:
placeCatOnBoard将猫咪写入棋盘格子removeCat同时清空 board 和 Mapboard[y][x]?.id === cat.id防止误删
下一篇预告:第 132 篇将深入游戏结束判定——GAME_OVER_ROW 检测。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- GameEngine 完整源码
- 开源鸿蒙跨平台社区
- 第 130 篇:循环合并链
- 第 132 篇:游戏结束判定