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.
Aufgabe
EinfachDas 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.
- Gehe in
Room.__init__alle Einträge inlinesdurch und füge für jedes#ein 48 × 48 großes Rect an der Position(col * TILE, row * TILE)zuself.wallshinzu. Das Startgerüst erstellt bereitsroom = Room(MAP). - Zeichne nach dem Boden
wall_imgan jeder Rect inroom.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