Menu
CoddyTech

Filas y columnas

Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 2 de 35.

Un bucle recorre una fila. Un segundo bucle a su alrededor recorre las filas hacia abajo, así que juntos visitan cada casilla del mapa. El bucle externo asigna cada cadena de LEVEL a line, junto con su número de fila; el bucle interno recorre los caracteres de esa línea.

walls = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))

Construye las paredes una sola vez, antes del bucle del juego, como una lista de Rect. El mapa no cambia mientras juegas, y un Rect es lo que usarás después para comprobar las colisiones. En el bucle del juego, dibuja cada pared:

for wall in walls:
    pygame.draw.rect(screen, WALL, wall)

row viene del bucle externo, así que determina la y de la casilla; col, del bucle interno, determina la x. Si los confundes, el nivel quedará de lado.

challenge icon

Desafío

Intermedio
  1. Antes del bucle del juego, crea una lista llamada walls.
  2. Recorre cada fila de LEVEL y cada carácter de esta con dos bucles enumerate. Para cada #, añade pygame.Rect(col * TILE, row * TILE, TILE, TILE) a walls.
  3. En el bucle del juego, dibuja cada Rect de walls en color marrón WALL, en lugar de dibujar solo la fila inferior.

Pruébalo tú mismo

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#....####......#",
    "#..............#",
    "#.........##...#",
    "#..##.....##...#",
    "#..##..........#",
    "#.........###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

player = pygame.Rect(40, 40, 28, 28)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4
    if keys[pygame.K_UP]:
        player.y -= 4
    if keys[pygame.K_DOWN]:
        player.y += 4

    screen.fill((30, 30, 46))
    for col, char in enumerate(LEVEL[9]):
        if char == "#":
            pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
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 Mundos

Practica por tu cuenta: Playground de Pygame