文章配图:棋盘状态的增删管理

页面预览

前言

在「猫猫大作战」中,放置移除是棋盘管理的基础操作——猫咪下落到底部时放置到棋盘格子上,合并时移除被合并的猫咪。这两个方法维护 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 和 Map
  • board[y][x]?.id === cat.id 防止误删

下一篇预告:第 132 篇将深入游戏结束判定——GAME_OVER_ROW 检测。

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


相关资源:

Logo

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

更多推荐