Zeilen und Spalten
Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 2 von 35.
Eine Schleife läuft eine Zeile entlang. Eine zweite Schleife darum herum läuft die Zeilen nach unten durch, sodass sie gemeinsam jedes Feld der Karte besuchen. Die äußere Schleife liefert jede Zeichenkette aus LEVEL als line zusammen mit ihrer Zeilennummer; die innere Schleife durchläuft die Zeichen dieser Zeile.
walls = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))Erstelle die Wände einmal vor der Spielschleife als Liste von Rects. Die Karte ändert sich während des Spiels nicht, und ein Rect ist das, mit dem du später Kollisionen prüfst. Zeichne in der Spielschleife jede Wand:
for wall in walls:
pygame.draw.rect(screen, WALL, wall)row stammt aus der äußeren Schleife und bestimmt daher das y des Feldes; col aus der inneren Schleife bestimmt das x. Wenn du sie vertauschst, liegt das Level auf der Seite.
Aufgabe
Mittel- Erstelle vor der Spielschleife eine Liste mit dem Namen
walls. - Durchlaufe jede Zeile von
LEVELund jedes Zeichen darin mit zweienumerate-Schleifen. Füge für jedes#pygame.Rect(col * TILE, row * TILE, TILE, TILE)zuwallshinzu. - Zeichne in der Spielschleife jedes Rect in
wallsin Braun mitWALL, statt nur die unterste Zeile zu zeichnen.
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))
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
pygame.draw.rect(screen, PLAYER, player)
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