Menu
CoddyTech

Imagens de tiles

Parte da seção Mundos do Journey de Pygame da Coddy. Lição 6 de 35.

Retângulos marrons mostram onde estão as paredes. As imagens fazem o nível parecer um lugar. Carregue cada imagem de peça uma vez, depois 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 peça tem 36 por 36, o tamanho de uma peça do mapa, então ela se encaixa na grade sem redimensionamento. A imagem da moeda tem uma borda vazia, então desenhe-a no canto da peça, e a moeda ficará no meio.

Mantenha o que deve ser desenhado em uma única lista de pares: qual imagem e onde. tiles.append((block_img, rect)) adiciona um par; o loop do jogo desenha todos eles:

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

O loop desempacota cada par em image e rect.

challenge icon

Desafio

Fácil
  1. Depois de set_mode, carregue assets/images/block.png em block_img e assets/images/coin.png em coin_img, cada um com convert_alpha().
  2. Antes do loop do jogo, crie uma lista chamada tiles: para cada #, o par (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); para cada C, (coin_img, ...) com o mesmo Rect.
  3. No loop do jogo, use blit em cada par de tiles em vez de desenhar os retângulos marrons e amarelos.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Mundos

Pratique por conta própria: Playground de Pygame