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.
Desafio
Fácil- Depois de
set_mode, carregueassets/images/block.pngemblock_imgeassets/images/coin.pngemcoin_img, cada um comconvert_alpha(). - 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 cadaC,(coin_img, ...)com o mesmo Rect. - No loop do jogo, use blit em cada par de
tilesem 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()
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
1Mapas em Texto
Um nível em textoLinhas e colunasLetras com significadoOnde o jogador começaUma tela de cada vez5Uma câmera com rolagem
Deslocamento da câmeraSiga o jogadorMantenha a câmera dentro dos limitesParalaxePratique por conta própria: Playground de Pygame