Menu
CoddyTech

Der Innenhof

Lektion 1 von 20 im Kurs Pygame-Projekt: Verteidige den Bergfried von Coddy.

In diesem Kurs entwickelst du ein ganzes Spiel, ein Feature pro Lektion. Ein Ritter steht nachts in einem Burghof. Monster kommen über die Mauern, immer mehr von ihnen, und die Waffen des Ritters feuern von selbst. Du bewegst dich nur. Halte bis zum Morgengrauen durch, dann ist die Burg gerettet.

Es beginnt mit dem Burghof: einem Raster aus 48 Pixel großen Kacheln, 15 nebeneinander und 10 untereinander, mit Boden im Inneren und einer Mauer am Rand. Du könntest in jedem Frame 150 Kacheln zeichnen, aber sie ändern sich nie. Zeichne sie einmal auf eine Surface in Fenstergröße und setze dieses eine Bild dann in jedem Frame auf den Bildschirm:

background = pygame.Surface((WIDTH, HEIGHT))
for row in range(HEIGHT // TILE):
    for col in range(WIDTH // TILE):
        x = col * TILE
        y = row * TILE
        background.blit(floor_img, (x, y))

courtyard ist das Rect innerhalb der Mauern. courtyard.collidepoint(x, y) ist True, wenn sich der Punkt (x, y), hier die obere linke Ecke einer Kachel, darin befindet.

challenge icon

Aufgabe

Einfach
  1. Durchlaufe unter # build the courtyard here jede Zeile und Spalte von Kacheln.
  2. Zeichne floor_img mit Blit auf background, wenn courtyard.collidepoint(x, y) True ist, und überall sonst wall_img.
  3. Ersetze in der Spielschleife screen.fill((20, 20, 30)) durch screen.blit(background, (0, 0)).

Probier es selbst

import pygame

WIDTH, HEIGHT = 720, 480
TILE = 48

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Hold the Keep")
clock = pygame.time.Clock()


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


floor_img = load("floor.png")
wall_img = load("wall.png")

courtyard = pygame.Rect(TILE, TILE, WIDTH - 2 * TILE, HEIGHT - 2 * TILE)
background = pygame.Surface((WIDTH, HEIGHT))
# Baue hier den Innenhof


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

    screen.fill((20, 20, 30))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Pygame-Projekt: Verteidige den Bergfried

Übe selbstständig: Pygame-Playground