Menu
CoddyTech

Imágenes de losetas

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

Los rectángulos marrones muestran dónde están las paredes. Las imágenes hacen que el nivel parezca un lugar. Carga cada imagen de mosaico una vez, después de set_mode:

block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()

Cada mosaico mide 36 por 36, el tamaño de un mosaico del mapa, así que encaja en la cuadrícula sin cambiar de escala. La imagen de la moneda tiene un borde vacío, así que dibújala en la esquina del mosaico y la moneda quedará en el centro.

Guarda lo que hay que dibujar en una sola lista de pares: qué imagen y dónde. tiles.append((block_img, rect)) añade un par; el bucle del juego los dibuja todos:

for image, rect in tiles:
    screen.blit(image, rect)

El bucle desempaqueta cada par en image y rect.

challenge icon

Desafío

Fácil
  1. Después de set_mode, carga assets/images/block.png en block_img y assets/images/coin.png en coin_img, cada uno con convert_alpha().
  2. Antes del bucle del juego, crea una lista llamada tiles: para cada #, el par (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); para cada C, (coin_img, ...) con el mismo Rect.
  3. En el bucle del juego, dibuja con blit cada par de tiles en lugar de dibujar los rectángulos marrón y amarillo.

Pruébalo tú mismo

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)

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

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

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

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

    screen.fill((140, 200, 240))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    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