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.
Aufgabe
Einfach- Lade nach
set_modeassets/images/block.pnginblock_imgundassets/images/coin.pngincoin_img, jeweils mitconvert_alpha(). - 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 jedesC(coin_img, ...)mit demselben Rect. - 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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spielwelten
1Karten aus Text
Ein Level in TextformZeilen und SpaltenBuchstaben mit BedeutungWo der Spieler startetEin Bildschirm nach dem anderen4Kollisionen mit Plattformen
Wände links und rechtsAuf Plattformen landenStoß dir den KopfAus dem Level fallenEine Achse nach der anderen3Schwerkraft und Springen
Fallen mit SchwerkraftVom Boden springenKurze SprüngeEine maximale FallgeschwindigkeitSprungpuffer6Patrouillierende Gegner
Ein patrouillierender BlobDrauftreten oder getroffen werdenEin GehzyklusGegner aus der KarteÜbe selbstständig: Pygame-Playground