访问 2D 数组元素
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 13 课,共 78 课。
要访问二维数组中的一个单元格,需要使用两个索引:第一个选择行,第二个选择该行中的列。两者都从 0 开始。
var level := [
[1, 1, 1, 1],
[1, 0, 2, 1],
[1, 1, 1, 1]
]
print(level[1][2]) # 2(第 1 行,第 2 列)
print(level[0][0]) # 1level[1] 返回这一行 [1, 0, 2, 1],然后 [2] 选取该行中索引为 2 的元素。负索引从末尾开始计数,就像在任何数组中一样:level[-1][-1] 表示右下角的单元格。
给单元格赋值即可更改它。当玩家拾取硬币时,它所在的图块会变成地板:
level[1][2] = 0
print(level[1]) # [1, 0, 0, 1]超出网格范围的索引会导致错误并停止程序:level[3][0] 会失败,因为行的索引范围是 0 到 2。当索引来自输入或计算结果时,请先检查它们是否在网格大小范围内:
var row := 2
var col := 5
if row >= 0 and row < level.size() and col >= 0 and col < level[row].size():
print(level[row][col])
else:
print("Outside the map")这里会输出 Outside the map,因为第 5 列不存在。and 会在遇到第一个值为 false 的条件时停止,因此只有在该行存在时才会读取 level[row]。
挑战
简单编写一个名为 get_tile 的函数,包含三个参数:
grid:一个由整数构成的二维数组(将其声明为grid: Array)row:行索引col:列索引
它会返回对应行和列位置的值。如果 row 或 col 超出数组范围(小于 0,或不小于行数或列数),则返回 -1。负索引也算超出范围。
例如,get_tile([[1, 2, 3], [4, 5, 6]], 1, 2) 会返回 6,而 get_tile([[1, 2], [3, 4]], 2, 1) 会返回 -1。
测试会自行调用 get_tile() 并检查它返回的值。不要调用它,也不要打印任何内容。
亲手试试
func get_tile(grid: Array, row: int, col: int):
# 在这里编写代码
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器