Menu
CoddyTech

Kachelbilder

Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 6 von 35.

Braune Rechtecke zeigen, wo sich die Wände befinden. Bilder lassen das Level wie einen Ort aussehen. Lade jedes Kachelbild einmal nach set_mode:

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

Jede Kachel ist 36 mal 36 Pixel groß, also so groß wie eine Kartenkachel, und passt daher ohne Skalierung ins Raster. Das Münzbild hat einen transparenten Rand, daher wird es an der Ecke der Kachel gezeichnet und die Münze sitzt in der Mitte.

Halte in einer Liste von Paaren fest, was gezeichnet werden soll: welches Bild und wo. tiles.append((block_img, rect)) fügt ein Paar hinzu; die Spielschleife zeichnet alle Paare:

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

Die Schleife entpackt jedes Paar in image und rect.

challenge icon

Aufgabe

Einfach
  1. Lade nach set_mode assets/images/block.png in block_img und assets/images/coin.png in coin_img, jeweils mit convert_alpha().
  2. Erstelle vor der Spielschleife eine Liste namens tiles: für jedes # das Paar (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); für jedes C (coin_img, ...) mit demselben Rect.
  3. Blitte in der Spielschleife jedes Paar in tiles, statt die braunen und gelben Rechtecke zu zeichnen.

Probier es selbst

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 dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spielwelten

Übe selbstständig: Pygame-Playground