Menu
CoddyTech

Các chữ cái mang ý nghĩa

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

Bản đồ có thể chứa nhiều thứ hơn cả tường. Dùng một ký tự riêng cho mỗi loại vật thể. Ở đây, C là một đồng xu.

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    ...
]

Các vòng lặp tìm tường cũng tìm thấy đồng xu: kiểm tra từng ký tự bằng if và elif, rồi thêm từng vật thể vào danh sách riêng.

elif char == "C":
    coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))

Đồng xu nhỏ hơn ô bản đồ. Để căn giữa đồng xu 16 pixel trong ô 36 pixel, hãy đặt đồng xu cách cạnh trái và cạnh trên của ô (36 - 16) / 2 = 10 pixel.

Các ký tự bạn không kiểm tra sẽ không tạo ra vật thể nào, nên những ô . vẫn trống.

challenge icon

Thử thách

Dễ

Biến mỗi C trên bản đồ thành một đồng xu.

  1. Tạo một danh sách (list) tên là coins bên cạnh walls.
  2. Trong các vòng lặp (loop) trên bản đồ, với mỗi C, thêm pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16) vào coins.
  3. Sau khi vẽ các bức tường, vẽ từng đồng xu bằng màu vàng COIN, (255, 196, 0).

Nhấn Chơi: các đồng xu màu vàng sẽ xuất hiện ở những vị trí có C trên bản đồ. Sau đó nhấn Kiểm tra.

Tự làm thử

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    "#..............#",
    "#....C....##...#",
    "#..##.....##.C.#",
    "#..##..........#",
    "#.C.......###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

walls = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
player = pygame.Rect(40, 40, 28, 28)

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4
    if keys[pygame.K_UP]:
        player.y -= 4
    if keys[pygame.K_DOWN]:
        player.y += 4

    screen.fill((30, 30, 46))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    pygame.draw.rect(screen, PLAYER, player)
    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