Menu
CoddyTech

Вложенные циклы с двумерными массивами

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 14 из 78.

Чтобы пройти по каждой ячейке двумерного массива, поместите один цикл внутрь другого. Внешний цикл проходит по строкам, а внутренний — по ячейкам текущей строки:

var grid := [[1, 2, 3], [4, 5, 6]]
var total := 0
for row in grid:
	for cell in row:
		total += cell
print(total) # 21

Когда вам нужны координаты каждой ячейки, перебирайте индексы. r — индекс строки, c — индекс столбца, а во внутреннем цикле используется grid[r].size() — длина текущей строки:

for r in range(grid.size()):
	for c in range(grid[r].size()):
		grid[r][c] *= 10
print(grid) # [[10, 20, 30], [40, 50, 60]]

Присваивание cell в цикле for cell in row не изменяет сетку, потому что cell содержит копию числа. Изменяй ячейки по их индексам, как показано выше.

Вложенные циклы также создают сетку. Создай новую строку внутри внешнего цикла, заполни её во внутреннем цикле, а затем добавь её:

var town := []
for r in range(3):
	var row := []
	for c in range(4):
		row.append(".")
	town.append(row)
town[1][2] = "P"
for row in town:
	print("".join(row))
....
..P.
....

Строку нужно создать внутри внешнего цикла. При добавлении массива он используется совместно, а не копируется: если добавить один и тот же row три раза, все три строки будут одним массивом, и town[1][2] = "P" поместит P в каждую строку.

challenge icon

Задание

Легко

Нарисуйте карту города. Программа считывает четыре целых числа, по одному в каждой строке: количество строк, количество столбцов, строку, в которой находится игрок, и столбец, в котором находится игрок. Позиция игрока всегда находится внутри карты.

  1. Создайте grid — двумерный массив с указанным количеством строк и столбцов, где каждая ячейка содержит ".". Используйте вложенные циклы и создавайте новый массив строк для каждой строки.
  2. Установите значение ячейки в позиции игрока равным "P".
  3. Выведите карту: по одной строке на каждой строке вывода, без пробелов между ячейками.

Для входных данных 3, 4, 1 и 2 вывод будет таким:

....
..P.
....

Попробуйте сами

extends Node

func _ready():
	var rows := int(OS.read_string_from_stdin())
	var cols := int(OS.read_string_from_stdin())
	var player_row := int(OS.read_string_from_stdin())
	var player_col := int(OS.read_string_from_stdin())
	var grid := []

	# Создайте сетку с помощью вложенных циклов

	# Разместите игрока на карте

	# Выведите карту
	pass
quiz iconПроверьте себя

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

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

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