Ein Level in Textform
Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 1 von 35.
Eine Ebene Wand für Wand mit Zahlen zu zeichnen, ist langsam zu schreiben und schwer zu ändern. Gib die Ebene stattdessen als Text ein: eine Liste von Zeichenketten, eine Zeichenkette pro Reihe von Kacheln, ein Zeichen pro Kachel.
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]Hier steht # für eine Wand und . für freien Platz. LEVEL[9] ist die unterste Reihe, eine Zeichenkette, und LEVEL[9][4] ist ihr fünftes Zeichen. Die Reihen werden von oben nach unten und die Spalten von links nach rechts gezählt, jeweils ab 0.
Bei Kacheln mit einer Breite von TILE = 36 Pixeln beginnt die Kachel in Spalte col und Reihe row bei x = col * TILE, y = row * TILE. Um eine Reihe zu durchlaufen, gibt enumerate jedes Zeichen zusammen mit seinem Index zurück:
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))Zwei Lücken in der untersten Reihe bleiben leer, denn nur für ein # wird eine Kachel gezeichnet.
Aufgabe
EinfachDer Starter zeichnet die gesamte untere Zeile als einen braunen Balken. Zeichne sie stattdessen anhand der Karte:
- Entferne die Zeile, die den Balken zeichnet.
- Durchlaufe
LEVEL[9]mitenumerate. - Zeichne für jedes
#einWALL-Rechteck an der Position(col * TILE, 9 * TILE, TILE, TILE).
Lass die Karte unverändert. Das grüne Quadrat bewegt sich mit den Pfeiltasten und geht vorerst durch alles hindurch: Wände, die es aufhalten, kommen später in diesem Abschnitt.
Probier es selbst
import pygame
TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
player = pygame.Rect(40, 40, 28, 28)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
if keys[pygame.K_UP]:
player.y -= 4
if keys[pygame.K_DOWN]:
player.y += 4
screen.fill((30, 30, 46))
pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
pygame.draw.rect(screen, PLAYER, player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
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