文章配图:二维数组的创建、填充和操作

页面预览

前言

在「猫猫大作战」中,棋盘是一个 5×8 的二维网格,使用二维数组 (Cat | null)[][] 表示。理解二维数组的初始化和管理,是构建棋盘类游戏的基础。

本文以 GameEngine.initializeBoard() 为锚点,讲解二维数组的创建、填充和操作。

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

一、棋盘数据结构

1.1 初始化棋盘

private initializeBoard() {
  this.board = Array(GameConfig.BOARD_HEIGHT)
    .fill(null)
    .map(() => Array(GameConfig.BOARD_WIDTH).fill(null));
}

1.2 结构说明

5 列(x: 0-4)
┌────┬────┬────┬────┬────┐
│ 0,0│ 1,0│ 2,0│ 3,0│ 4,0│  ← row 0(顶部)
├────┼────┼────┼────┼────┤
│ 0,1│ 1,1│ 2,1│ 3,1│ 4,1│
├────┼────┼────┼────┼────┤
│... │    │    │    │    │
├────┼────┼────┼────┼────┤
│ 0,7│ 1,7│ 2,7│ 3,7│ 4,7│  ← row 7(底部)
└────┴────┴────┴────┴────┘
8 行(y: 0-7)

二、常见踩坑

// 🚫 错误:fill 引用同一数组
this.board = Array(8).fill(Array(5).fill(null));
// → 所有行引用同一个数组,改一行全改

// ✅ 正确:map 创建独立数组
this.board = Array(8).fill(null).map(() => Array(5).fill(null));

三、总结

二维数组使用 Array.fill + map 初始化,注意避免引用共享问题。

核心要点

  • board[y][x] 表示第 y 行第 x 列
  • fill + map 创建独立行的二维数组
  • null 表示空位

下一篇预告:第 113 篇将深入 Map 猫咪集合——id→Cat 的高效映射。

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


相关资源:

Logo

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

更多推荐