Menu
CoddyTech

Bucles anidados con arrays 2D

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 14 de 78.

Para visitar cada celda de una matriz 2D, coloca un bucle dentro de otro. El bucle externo recorre las filas y el bucle interno recorre las celdas de la fila actual:

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

Cuando necesites la posición de cada celda, recorre los índices. r es el índice de la fila, c el índice de la columna, y el bucle interno usa grid[r].size(), la longitud de la fila actual:

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]]

Asignar a cell en un bucle for cell in row no cambia la cuadrícula, porque cell contiene una copia del número. Cambia las celdas mediante sus índices, como se indicó arriba.

Los bucles anidados también crean una cuadrícula. Crea una nueva fila dentro del bucle externo, rellénala en el bucle interno y luego añádela:

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.
....

La fila debe crearse dentro del bucle externo. Un arreglo se comparte, no se copia, cuando lo agregas: si agregas la misma row tres veces, las tres filas son un solo arreglo, y town[1][2] = "P" coloca una P en cada fila.

challenge icon

Desafío

Fácil

Dibuja el mapa de un pueblo. El programa lee cuatro números enteros, uno por línea: el número de filas, el número de columnas, la fila del jugador y la columna del jugador. La posición del jugador siempre está dentro del mapa.

  1. Crea grid, una matriz 2D con esa cantidad de filas y columnas, donde cada celda sea ".". Usa bucles anidados y crea una nueva matriz de fila para cada fila.
  2. Establece la celda en la posición del jugador como "P".
  3. Imprime el mapa, una fila por línea, sin espacios entre las celdas.

Para las entradas 3, 4, 1 y 2, la salida es:

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

Pruébalo tú mismo

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 := []

	# Construye la cuadrícula con bucles anidados

	# Coloca al jugador en el mapa

	# Imprime el mapa
	pass
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online