Menu
CoddyTech

Poziom w tekście

Część sekcji Światy ścieżki Pygame w Coddy. Lekcja 1 z 35.

Rysowanie poziomu ściana po ścianie za pomocą liczb jest powolne i trudne do zmiany. Zamiast tego zapisz poziom jako tekst: listę ciągów znaków, po jednym ciągu na każdy wiersz kafelków i po jednym znaku na każdy kafelek.

LEVEL = [
    "################",
    "#..............#",
    "#....####......#",
    "#..............#",
    "#.........##...#",
    "#..##.....##...#",
    "#..##..........#",
    "#.........###..#",
    "#..............#",
    "####..####..####",
]

Tutaj # oznacza ścianę, a . — pustą przestrzeń. LEVEL[9] to dolny wiersz, będący ciągiem znaków, a LEVEL[9][4] to jego piąty znak. Wiersze liczymy od góry, kolumny od lewej, w obu przypadkach zaczynając od 0.

Przy kafelkach o szerokości TILE = 36 pikseli kafelek w kolumnie col i wierszu row zaczyna się w punkcie x = col * TILE, y = row * TILE. Aby przejść przez jeden wiersz, enumerate zwraca każdy znak wraz z jego indeksem:

for col, char in enumerate(LEVEL[9]):
    if char == "#":
        pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))

Dwie przerwy w dolnym wierszu pozostają puste, ponieważ kafelek rysuje tylko #.

challenge icon

Wyzwanie

Łatwy

Program startowy rysuje cały dolny rząd jako jeden brązowy pasek. Narysuj go na podstawie mapy:

  1. Usuń wiersz, który rysuje pasek.
  2. Użyj pętli, aby przejść przez LEVEL[9] z enumerate.
  3. Dla każdego # narysuj prostokąt WALL w punkcie (col * TILE, 9 * TILE, TILE, TILE).

Pozostaw mapę bez zmian. Zielony kwadrat porusza się za pomocą klawiszy strzałek i na razie przenika przez wszystko: ściany, które go zatrzymują, pojawią się później w tej sekcji.

Spróbuj swoich sił

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#....####......#",
    "#..............#",
    "#.........##...#",
    "#..##.....##...#",
    "#..##..........#",
    "#.........###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

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))
    pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Wszystkie lekcje w sekcji Światy

Poćwicz samodzielnie: Edytor online Pygame