Hàng và cột
Thuộc phần Thế giới trò chơi trong hành trình Pygame của Coddy. Bài học 2 trên 36.
Một vòng lặp đi dọc theo một hàng. Vòng lặp thứ hai bao quanh nó đi xuống các hàng, nên khi kết hợp, chúng sẽ duyệt qua mọi ô của bản đồ. Vòng lặp ngoài lấy từng chuỗi trong LEVEL làm line, cùng với số hàng tương ứng; vòng lặp trong duyệt các ký tự của dòng đó.
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))Tạo các bức tường một lần trước vòng lặp trò chơi, dưới dạng một danh sách các Rect. Bản đồ không thay đổi trong lúc bạn chơi, và sau này bạn sẽ dùng Rect để kiểm tra va chạm. Trong vòng lặp trò chơi, hãy vẽ từng bức tường:
for wall in walls:
pygame.draw.rect(screen, WALL, wall)row đến từ vòng lặp ngoài, nên nó xác định tọa độ y của ô; col từ vòng lặp trong xác định tọa độ x. Nếu nhầm lẫn chúng, màn chơi sẽ bị xoay ngang.
Thử thách
Trung bìnhTạo mọi bức tường trên bản đồ, không chỉ hàng dưới cùng.
- Trước vòng lặp trò chơi, tạo một danh sách tên là
walls. - Dùng hai vòng lặp
enumerate, thêmpygame.Rect(col * TILE, row * TILE, TILE, TILE)vàowallscho mỗi#trongLEVEL. - Vẽ mọi Rect trong
wallsbằng màu nâuWALLthay vì chỉ vẽ hàng dưới cùng.
Nhấn nút "Chơi": toàn bộ bản đồ sẽ hiện ra. Sau đó nhấn "Kiểm tra".
Tự làm thử
import pygame
TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
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 col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
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
1Bản đồ dạng văn bản
Một màn chơi bằng văn bảnHàng và cộtCác chữ cái mang ý nghĩaNơi người chơi bắt đầuTừng màn hình mộtTự luyện tập: Playground Pygame