Menu
CoddyTech

Sân trong

Bài học 1 trên 25 trong khóa học Dự án Pygame: Trấn giữ thành trì của Coddy.

Trong khóa học này, bạn sẽ xây dựng trọn vẹn một trò chơi, mỗi bài học là một tính năng. Một hiệp sĩ đứng trong sân lâu đài vào ban đêm. Quái vật tràn qua tường, ngày càng nhiều, còn vũ khí của hiệp sĩ tự bắn. Bạn chỉ cần di chuyển. Cầm cự đến bình minh để cứu pháo đài.

Trò chơi bắt đầu với sân: một lưới gồm các ô 48 pixel, rộng 15 ô và cao 10 ô, nền lát bên trong và tường bao quanh rìa. Bạn có thể vẽ 150 ô mỗi khung hình, nhưng chúng không bao giờ thay đổi. Hãy vẽ chúng một lần lên một Surface có kích thước bằng cửa sổ, rồi hiển thị hình ảnh đó trên màn hình ở mỗi khung hình:

background = pygame.Surface((WIDTH, HEIGHT))
for row in range(HEIGHT // TILE):
    for col in range(WIDTH // TILE):
        x = col * TILE
        y = row * TILE
        background.blit(floor_img, (x, y))

courtyard là Rect bên trong những bức tường. courtyard.collidepoint(x, y) là True khi điểm (x, y), ở đây là góc trên bên trái của một ô, nằm bên trong đó.

challenge icon

Thử thách

Dễ

Hãy tạo sân trong một lần dưới dạng một hình nền.

  1. Bên dưới # build the courtyard here, lặp qua từng hàng và cột ô.
  2. Vẽ floor_img lên background tại những vị trí courtyard.collidepoint(x, y) là True, và vẽ wall_img ở mọi vị trí khác.
  3. Trong vòng lặp trò chơi, thay screen.fill((20, 20, 30)) bằng screen.blit(background, (0, 0)).

Nhấn Chơi: các ô sàn lấp đầy sân trong, bao quanh bởi một vòng tường. Sau đó nhấn Kiểm tra.

Tự làm thử

import pygame

WIDTH, HEIGHT = 720, 480
TILE = 48

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Hold the Keep")
clock = pygame.time.Clock()


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


floor_img = load("floor.png")
wall_img = load("wall.png")

courtyard = pygame.Rect(TILE, TILE, WIDTH - 2 * TILE, HEIGHT - 2 * TILE)
background = pygame.Surface((WIDTH, HEIGHT))
# Tạo sân trong ở đây


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 20, 30))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tất cả bài học trong Dự án Pygame: Trấn giữ thành trì

Tự luyện tập: Playground Pygame