Gdzie zaczyna gracz
Część sekcji Światy ścieżki Pygame w Coddy. Lekcja 4 z 35.
Poziom określa, gdzie zaczyna gracz, więc umieść to również na mapie: jedno P. Gdy pętle odczytują mapę, kafelek P wskazuje początkową pozycję gracza.
elif char == "P":
player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)Gracz jest kwadratem o boku 28 pikseli, więc zaczyna 4 piksele od narożnika kafelka, pośrodku kafelka: (36 - 28) / 2 = 4. Teraz przesunięcie P w tekście zmienia pozycję startową — nie trzeba niczego obliczać.
Pętla uruchamia się przed pętlą gry, więc player już istnieje, gdy pętla gry zaczyna nim poruszać. Upewnij się, że nic po pętlach nie ustawia ponownie player, bo wtedy wygra ta późniejsza linia.
Wyzwanie
ŁatwyMapa ma teraz symbol P. Kod początkowy umieszcza gracza w stałym miejscu (40, 40).
- W pętlach przeglądających mapę, dla
Pustawplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28). - Usuń wiersz, który umieszcza gracza w miejscu
(40, 40).
Spróbuj swoich sił
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()
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Światy
1Mapy z tekstu
Poziom w tekścieWiersze i kolumnyLitery ze znaczeniemGdzie zaczyna graczJeden ekran narazPoćwicz samodzielnie: Edytor online Pygame