游戏开发:三维数组(tridimensional arrays)初始化方法求助
三维数组[3][3][2]的正确初始化方法
首先要注意:多数游戏开发常用编程语言(比如C/C++、JavaScript)的数组索引是0-based(从0开始),你原来的代码里用[1][1]、[3][3]这类索引,对于[3][3][2]的数组来说会触发越界——这个数组的有效索引范围是房间0-2、区域0-2、坐标0(x)/1(y)。
你之前尝试的写法错误在于多嵌套了一层大括号,且结构混乱,下面是对应你需求的正确初始化方式,以C/C++为例(其他语言语法逻辑类似,仅声明细节略有差异):
// 声明并初始化三维数组,结构对应:[房间][区域][x/y] int zonasDeInteraccion[3][3][2] = { // 第1个房间(对应你原代码的房间1) { {10, 5}, // 区域1:x=10, y=5 {20, 5}, // 区域2:x=20, y=5 {30, 5} // 区域3:x=30, y=5 }, // 第2个房间(对应你原代码的房间2) { {30, 7}, // 区域1:x=30, y=7 {4, 23}, // 区域2:x=4, y=23 {45, 5} // 区域3:x=45, y=5 }, // 第3个房间(对应你原代码的房间3) { {35, 0}, // 区域1:x=35, y=0 {1, 11}, // 区域2:x=1, y=11 {4, 44} // 区域3:x=4, y=44 } };
写法说明:
- 最外层大括号包含3个元素,对应3个房间
- 每个房间的大括号包含3个元素,对应该房间的3个区域
- 每个区域的大括号包含2个元素,对应x和y坐标
- 这种结构和你逐个赋值的数据完全匹配,可读性和维护性更强
如果业务逻辑里必须用1-based索引(比如用1、2、3标识房间/区域),可以声明一个更大的数组(比如[4][4][2]),把索引0的位置留空不用,示例如下:
int zonasDeInteraccion[4][4][2] = { {}, // 索引0的房间留空 { {}, // 索引0的区域留空 {10, 5}, {20, 5}, {30, 5} }, { {}, {30, 7}, {4, 23}, {45, 5} }, { {}, {35, 0}, {1, 11}, {4, 44} } };
不过更推荐用0-based索引,这是多数编程语言的标准习惯,能有效避免数组越界风险。
内容的提问来源于stack exchange,提问作者JaviMar113
相关产品推荐
相关产品推荐

