Menu
CoddyTech

Immagini a tessere

Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 6 di 35.

I rettangoli marroni mostrano dove si trovano i muri. Le immagini fanno sembrare il livello un luogo. Carica ogni immagine della tessera una volta, dopo set_mode:

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

Ogni tessera misura 36 per 36, la dimensione di una tessera della mappa, quindi si adatta alla griglia senza ridimensionamento. L'immagine della moneta ha un bordo vuoto, quindi disegnala nell'angolo della tessera e la moneta si troverà al centro.

Inserisci ciò che va disegnato in un'unica lista di coppie: quale immagine e dove. tiles.append((block_img, rect)) aggiunge una coppia; il ciclo di gioco le disegna tutte:

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

Il ciclo scompatta ogni coppia in image e rect.

challenge icon

Sfida

Facile
  1. Dopo set_mode, carica assets/images/block.png in block_img e assets/images/coin.png in coin_img, ciascuna con convert_alpha().
  2. Prima del ciclo di gioco, crea un elenco chiamato tiles: per ogni #, la coppia (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); per ogni C, (coin_img, ...) con lo stesso Rect.
  3. Nel ciclo di gioco, esegui il blit di ogni coppia in tiles invece di disegnare i rettangoli marrone e giallo.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Mondi

Esercitati da solo: Playground Pygame