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.
Aufgabe
Einfach- Durchlaufe unter
# build the courtyard herejede Zeile und Spalte von Kacheln. - Zeichne
floor_imgmit Blit aufbackground, wenncourtyard.collidepoint(x, y)True ist, und überall sonstwall_img. - Ersetze in der Spielschleife
screen.fill((20, 20, 30))durchscreen.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