Một màn chơi bằng văn bản
Thuộc phần Thế giới trò chơi trong hành trình Pygame của Coddy. Bài học 1 trên 36.
Vẽ tường cho từng ô trong màn chơi bằng các con số rất mất thời gian viết và khó chỉnh sửa. Thay vào đó, hãy nhập màn chơi dưới dạng văn bản: một danh sách các chuỗi, mỗi chuỗi là một hàng ô, mỗi ký tự là một ô.
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]Ở đây, # là tường và . là khoảng trống. LEVEL[9] là hàng dưới cùng, một chuỗi, còn LEVEL[9][4] là ký tự thứ năm của hàng đó. Các hàng được đếm từ trên xuống, các cột được đếm từ trái sang phải, cả hai đều bắt đầu từ 0.
Với ô có chiều rộng TILE = 36 pixel, ô ở cột col và hàng row bắt đầu tại x = col * TILE, y = row * TILE. Để duyệt qua một hàng, enumerate trả về từng ký tự cùng với chỉ số của nó:
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))Hai khoảng trống ở hàng dưới cùng vẫn để trống, vì chỉ có # mới vẽ một ô.
Giữ nguyên bản đồ. Ô vuông màu xanh lá di chuyển bằng các phím mũi tên và hiện tại có thể đi xuyên qua mọi thứ. Trong phần này, bạn sẽ tạo các bức tường để chặn nó sau.
Thử thách
DễVẽ hàng dưới cùng của màn chơi từ bản đồ.
- Xóa dòng vẽ thanh màu nâu.
- Lặp qua
LEVEL[9]bằngenumerate. - Với mỗi
#, vẽ một hình chữ nhậtWALLtại(col * TILE, 9 * TILE, TILE, TILE).
Nhấn “Chơi”: hàng dưới cùng có hai khoảng trống. 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))
pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
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