Menu
CoddyTech

Доступ к элементам двумерного массива

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 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]) # 1

level[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] считывается, только если строка существует.

challenge icon

Задание

Легко

Напиши функцию с именем get_tile с тремя параметрами:

  1. grid: двумерный массив целых чисел (объяви его как grid: Array)
  2. row: индекс строки
  3. 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript