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 đó.
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.
- Bên dưới
# build the courtyard here, lặp qua từng hàng và cột ô. - Vẽ
floor_imglênbackgroundtại những vị trícourtyard.collidepoint(x, y)là True, và vẽwall_imgở mọi vị trí khác. - Trong vòng lặp trò chơi, thay
screen.fill((20, 20, 30))bằngscreen.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