Menu
CoddyTech

Xây dựng hang động

Thuộc phần Thế giới trò chơi trong hành trình Pygame của Coddy. Bài học 28 trên 36.

Moss Caves là một trò chơi đi cảnh của riêng bạn: chạy qua hang động phủ rêu, nhặt xu, nhảy qua gai và hố, giẫm lên những khối bùn, tìm chìa khóa, mở cửa và đến lá cờ. Mỗi bước thêm một phần, được xây dựng từ những gì bạn đã tạo trong phần này.

Toàn bộ màn chơi là bản đồ trong phần khởi đầu, rộng 64 cột. # là nền đất, P là điểm bắt đầu, còn các chữ cái khác là những thứ bạn sẽ thêm vào: C là xu, ^ là gai, E là khối bùn, K là chìa khóa, D là cửa, F là lá cờ. Cho đến khi một bước xử lý một chữ cái, ô của chữ đó vẫn để trống.

Trước tiên, hãy tạo nền đất. Duyệt qua bản đồ một lượt để điền các Rect vào walls nhằm xử lý va chạm và các cặp (image, Rect) vào tiles để vẽ, chọn cỏ, đất hoặc ô rìa bằng solid(), như trong chương Tiles:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # chọn ảnh bằng solid(), như trước
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

Nhân vật đứng trên start, ở giữa cạnh dưới của ô P.

challenge icon

Thử thách

Trung bình

Dựng hang động từ bản đồ.

  1. Tạo walls và tiles, rồi lặp qua bản đồ: mỗi # chọn hình ảnh bằng solid() như trong bài Ô cạnh; Rect của nó được thêm vào walls, còn cặp này được thêm vào tiles.
  2. P đặt start thành midbottom của ô; tạo player = player_img.get_rect(midbottom=start).
  3. Sau hình nền, dùng blit để vẽ các ô, rồi đến nhân vật.

Nhấn Chơi: nhà thám hiểm đứng trên nền hang động. Sau đó nhấn Kiểm tra.

Tự làm thử

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()

Tất cả bài học trong Thế giới trò chơi

Tự luyện tập: Playground Pygame