Menu
CoddyTech

常见的 2D 数组模式

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 17 课,共 78 课。

遍历网格有几种常见方式。以下示例使用大小为 n 的方形网格:

var grid := [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
]
var n := grid.size()

对角线。在主对角线上,行索引等于列索引:grid[i][i]。在从右上角到左下角的副对角线上,列索引为 n - 1 - i。一个循环就够了:

for i in range(n):
	print(grid[i][i], " ", grid[i][n - 1 - i])
1 3
5 5
9 7

行、列和边界。固定一个索引,遍历另一个索引。顶行是 grid[0],底行是 grid[n - 1]。列保持 c 不变,同时行发生变化:

var left_total := 0
for r in range(n):
	left_total += grid[r][0] # 左侧列:1 + 4 + 7
print(left_total) # 12

相邻单元格。在网格游戏中,你经常会查看某个位置周围的单元格:上、下、左、右。将这四个方向的步长存储为由 [row, column] 对组成的数组,并跳过会移出网格的步长:

var r := 0
var c := 1
for step in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
	var nr: int = r + step[0]
	var nc: int = c + step[1]
	if nr >= 0 and nr < n and nc >= 0 and nc < n:
		print(grid[nr][nc])

单元格 grid[0][1] 位于上边界,因此它有 3 个邻居:5、1 和 3。

challenge icon

挑战

简单

编写一个名为 print_patterns 的函数,它有一个参数 grid:一个由整数构成的正方形二维数组(将它声明为 grid: Array)。它会输出六行,各值之间用一个空格分隔:

  1. Main diagonal: ,以及行索引等于列索引的单元格
  2. Anti-diagonal: ,以及从右上角到左下角的单元格
  3. Top row: ,以及第一行
  4. Bottom row: ,以及最后一行
  5. Left column: ,以及从上到下的第一列
  6. Right column: ,以及从上到下的最后一列

对于数组 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],输出为:

Main diagonal: 1 6 11 16
Anti-diagonal: 4 7 10 13
Top row: 1 2 3 4
Bottom row: 13 14 15 16
Left column: 1 5 9 13
Right column: 4 8 12 16

测试会自行调用 print_patterns()。不要调用它,也不要返回任何内容。

亲手试试

func print_patterns(grid: Array):
	# 在这里编写代码
	pass
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器