Menu
CoddyTech

Zbuduj jaskinie

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

Moss Caves to platformówka stworzona przez ciebie: biegnij przez omszałą jaskinię, zbieraj monety, przeskakuj kolce i przepaście, rozdeptuj gluty, znajdź klucz, otwórz drzwi i dotrzyj do flagi. Każdy krok dodaje jedną część, zbudowaną z tego, co utworzyłeś w tej sekcji.

Cały poziom to mapa w kodzie startowym, szeroka na 64 kolumny. # to ziemia, P to miejsce startu, a pozostałe litery oznaczają elementy, które dodasz: C to monety, ^ to kolce, E to gluty, K to klucz, D to drzwi, F to flaga. Dopóki dany krok nie odczyta litery, jej pole pozostaje puste.

Najpierw zbuduj ziemię. Jedno przejście po mapie wypełnia walls obiektami Rect do obsługi kolizji, a tiles parami (image, Rect) do rysowania, wybierając trawę, ziemię lub kafelek krawędzi za pomocą solid(), tak jak w rozdziale Tiles:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # wybierz obraz za pomocą solid(), tak jak wcześniej
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

Gracz stoi na start — na środku dolnej krawędzi pola P.

challenge icon

Wyzwanie

Średni
  1. Przed pętlą gry utwórz walls i tiles, a następnie przejdź przez mapę. Dla każdego # wybierz dirt_img, grass_left_img, grass_right_img lub grass_img za pomocą solid(), tak jak w lekcji „Krawędzie kafelków”, i dodaj Rect do walls, a parę do tiles.
  2. Dla P ustaw start na midbottom kafelka.
  3. Utwórz player = player_img.get_rect(midbottom=start).
  4. W pętli gry, po narysowaniu tła, narysuj każdy kafelek w jego Rect, a następnie gracza.

Spróbuj swoich sił

import pygame

TILE = 36
WIDTH, HEIGHT = 576, 360

LEVEL = [
    "................................................................",
    "................................................................",
    "................................................................",
    "................................................................",
    "#..............................................................#",
    "#....................C.........................#####...........#",
    "#......CC...C................CC.....CC.........#####.....CC....#",
    "#....................#.........................D...............#",
    "#.P.........#...E....#...^.......K......E......D.C....^......F.#",
    "#######..####################..##########################..#####",
]

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Moss Caves")
clock = pygame.time.Clock()


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


background = pygame.image.load("assets/backgrounds/forest.png").convert_alpha()
grass_img = load("grass.png")
grass_left_img = load("grass_left.png")
grass_right_img = load("grass_right.png")
dirt_img = load("dirt.png")
player_img = load("player.png")


def solid(row, col):
    if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
        return False
    return LEVEL[row][col] == "#"


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    for y in range(0, HEIGHT, 72):
        for x in range(0, WIDTH, 72):
            screen.blit(background, (x, y))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Światy

Poćwicz samodzielnie: Edytor online Pygame