Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel
  1. Erstelle vor der Spielschleife eine Liste mit dem Namen walls.
  2. Durchlaufe jede Zeile von LEVEL und jedes Zeichen darin mit zwei enumerate-Schleifen. Füge für jedes # pygame.Rect(col * TILE, row * TILE, TILE, TILE) zu walls hinzu.
  3. Zeichne in der Spielschleife jedes Rect in walls in Braun mit WALL, 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()
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