Menu
CoddyTech

Construye las cuevas

Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 28 de 35.

Moss Caves es un juego de plataformas propio: corre por una cueva cubierta de musgo, recoge monedas, salta sobre pinchos y hoyos, aplasta blobs, encuentra la llave, abre la puerta y llega a la bandera. Cada paso añade una parte, construida a partir de lo que hiciste en esta sección.

Todo el nivel es el mapa del proyecto inicial, de 64 columnas de ancho. # es suelo, P el inicio y las otras letras representan elementos que añadirás: C monedas, ^ pinchos, E blobs, K la llave, D la puerta, F la bandera. Hasta que un paso lea una letra, su casilla permanece vacía.

Primero, construye el suelo. Una pasada por el mapa llena walls con Rects para las colisiones y tiles con pares (image, Rect) para el dibujo, eligiendo césped, tierra o una casilla de borde con solid(), como en el capítulo de Tiles:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # elige la imagen con solid(), como antes
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

El jugador se sitúa en start, en el centro inferior de la casilla P.

challenge icon

Desafío

Intermedio
  1. Antes del bucle del juego, crea walls y tiles, y luego recorre el mapa. Para cada #, elige dirt_img, grass_left_img, grass_right_img o grass_img usando solid(), como en Bordes de losetas, y añade el Rect a walls y el par a tiles.
  2. Para P, establece start en el midbottom de la loseta.
  3. Crea player = player_img.get_rect(midbottom=start).
  4. En el bucle del juego, después del fondo, blitea cada loseta en su Rect y luego al jugador.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Mundos

Practica por tu cuenta: Playground de Pygame