Menu
CoddyTech

Buchstaben mit Bedeutung

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

Eine Karte kann mehr als nur Wände enthalten. Gib jeder Art von Objekt ihr eigenes Zeichen. Hier ist C eine Münze.

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    ...
]

Die Schleifen, die nach den Wänden suchen, finden auch die Münzen: Prüfe jedes Zeichen mit if und elif und füge jedes Objekt seiner eigenen Liste hinzu.

elif char == "C":
    coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))

Eine Münze ist kleiner als ihr Feld. Um eine 16 Pixel große Münze in einem 36 Pixel großen Feld zu zentrieren, setze sie 10 Pixel vom linken und oberen Rand des Felds entfernt an: (36 - 16) / 2 = 10.

Zeichen, nach denen du nicht suchst, bewirken nichts, daher bleiben die .-Felder leer.

challenge icon

Aufgabe

Einfach
  1. Erstelle neben walls eine Liste namens coins.
  2. Füge in den Kartenschleifen für jedes C pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16) zu coins hinzu.
  3. Zeichne in der Spielschleife nach den Wänden jede Münze in COIN-Gelb, (255, 196, 0).

Probier es selbst

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    "#..............#",
    "#....C....##...#",
    "#..##.....##.C.#",
    "#..##..........#",
    "#.C.......###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

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))
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 wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Spielwelten

Übe selbstständig: Pygame-Playground