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.midbottomNhân vật đứng trên start, ở giữa cạnh dưới của ô P.
Thử thách
Trung bìnhDựng hang động từ bản đồ.
- Tạo
wallsvàtiles, rồi lặp qua bản đồ: mỗi#chọn hình ảnh bằngsolid()như trong bài Ô cạnh; Rect của nó được thêm vàowalls, còn cặp này được thêm vàotiles. Pđặtstartthànhmidbottomcủa ô; tạoplayer = player_img.get_rect(midbottom=start).- 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