Menu
CoddyTech

Der erste Raum der Festung

Teil des Abschnitts Projekte der Pygame-Journey von Coddy. Lektion 21 von 31.

Dein nächstes Spiel ist Rune Keep: ein Ritter in der Draufsicht, gefangen in einer Burg mit drei Räumen. Jeder Raum hat einen Schlüssel, eine verschlossene Tür und Monster. Finde den Schlüssel, öffne die Tür, erreiche den nächsten Raum und komm mit deinen Herzen hinaus.

Ein Raum ist eine Textkarte wie in Moss Caves: 14 Spalten mit 10 Reihen aus 48 Pixel großen Kacheln, die ein Fenster mit 672 mal 480 Pixeln füllen. # ist eine Wand. Die anderen Buchstaben werden in den nächsten Lektionen zum Leben erweckt: P der Ritter, K der Schlüssel, D die Tür, S ein Schleim, H ein Trank. Vorerst sind sie Boden.

Eine Room-Klasse erstellt aus ihrer Karte alles, was ein Raum enthält. Später geht der Ritter von Raum zu Raum, und jeder neue Raum besteht aus einer Zeile: Room(MAP2).

class Room:
    def __init__(self, lines):
        self.walls = []
        for row, line in enumerate(lines):
            for col, char in enumerate(line):
                if char == "#":
                    self.walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))

Um eine Wand zu zeichnen, blitte ihr Bild an ihrer Rect-Position: screen.blit(wall_img, wall) platziert das Bild oben links an der Rect.

challenge icon

Aufgabe

Einfach

Das Startgerüst öffnet das Fenster, bedeckt es mit Bodenplatten und lädt die Schriftart sowie alle Bilder, die die Festung benötigt – bereit für die nächsten Lektionen: knight_img, key_img, slime_img und die übrigen.

  1. Gehe in Room.__init__ alle Einträge in lines durch und füge für jedes # ein 48 × 48 großes Rect an der Position (col * TILE, row * TILE) zu self.walls hinzu. Das Startgerüst erstellt bereits room = Room(MAP).
  2. Zeichne nach dem Boden wall_img an jeder Rect in room.walls.

Probier es selbst

import pygame

TILE = 48
MAP = [
    "##############",
    "#............#",
    "#.P......K...#",
    "#............#",
    "#....##......D",
    "#....##......#",
    "##.#######.###",
    "#............#",
    "#...S....H...#",
    "##############",
]

pygame.init()
screen = pygame.display.set_mode((672, 480))
pygame.display.set_caption("Rune Keep")
clock = pygame.time.Clock()
font = pygame.font.Font("assets/fonts/pixel.ttf", 32)


def load(name):
    return pygame.image.load("assets/images/" + name).convert_alpha()


floor_img = load("floor.png")
wall_img = load("wall.png")
knight_img = load("knight.png")
door_img = load("dungeon_door.png")
key_img = load("key.png")
slime_img = load("slime.png")
spider_img = load("spider.png")
heart_img = load("heart.png")
empty_img = load("heart_empty.png")
sword_img = load("sword.png")
potion_img = load("potion_red.png")


class Room:
    def __init__(self, lines):
        self.walls = []
        # Erstelle hier die Wände


room = Room(MAP)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for row in range(10):
        for col in range(14):
            screen.blit(floor_img, (col * TILE, row * TILE))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Projekte

Übe selbstständig: Pygame-Playground