Wo der Spieler startet
Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 4 von 35.
Ein Level legt fest, wo der Spieler startet. Füge also auch der Karte ein P hinzu. Beim Auslesen der Karte durch die Schleifen gibt das P-Feld die Startposition des Spielers an.
elif char == "P":
player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)Der Spieler ist ein Quadrat mit einer Seitenlänge von 28 Pixeln und startet daher 4 Pixel von der Ecke des Feldes entfernt, genau in der Mitte des Feldes: (36 - 28) / 2 = 4. Wenn du jetzt das P im Text verschiebst, ändert sich die Startposition: Du musst keine Zahlen ausrechnen.
Die Schleife wird vor der Spielschleife ausgeführt, daher existiert player, wenn die Spielschleife ihn bewegt. Achte darauf, dass nach den Schleifen nichts player erneut festlegt, sonst gilt diese spätere Zeile.
Aufgabe
EinfachDie Karte enthält jetzt ein P. Der Startercode setzt den Spieler an eine feste Position (40, 40).
- Erstelle in den Kartenschleifen für
Pplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28). - Entferne die Zeile, die den Spieler an die Position
(40, 40)setzt.
Probier es selbst
import pygame
TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#.C..####...C..#",
"#..............#",
"#....C....##...#",
"#..##.....##.C.#",
"#..##..P.......#",
"#.C.......###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
walls = []
coins = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
elif char == "C":
coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
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)
for coin in coins:
pygame.draw.rect(screen, COIN, coin)
pygame.draw.rect(screen, PLAYER, player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spielwelten
1Karten aus Text
Ein Level in TextformZeilen und SpaltenBuchstaben mit BedeutungWo der Spieler startetEin Bildschirm nach dem anderen4Kollisionen mit Plattformen
Wände links und rechtsAuf Plattformen landenStoß dir den KopfAus dem Level fallenEine Achse nach der anderen3Schwerkraft und Springen
Fallen mit SchwerkraftVom Boden springenKurze SprüngeEine maximale FallgeschwindigkeitSprungpuffer6Patrouillierende Gegner
Ein patrouillierender BlobDrauftreten oder getroffen werdenEin GehzyklusGegner aus der KarteÜbe selbstständig: Pygame-Playground