Nơi người chơi bắt đầu
Thuộc phần Thế giới trò chơi trong hành trình Pygame của Coddy. Bài học 4 trên 36.
Một màn chơi xác định vị trí bắt đầu của người chơi, vì vậy hãy thêm ký tự đó vào bản đồ: một P. Khi các vòng lặp đọc bản đồ, ô P sẽ xác định vị trí đầu tiên của người chơi.
elif char == "P":
player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)Người chơi là một hình vuông có cạnh 28 pixel, vì vậy nhân vật bắt đầu cách góc ô 4 pixel, ở giữa ô. Giờ đây, chỉ cần di chuyển chữ P trong văn bản để thay đổi vị trí bắt đầu, không cần tính toán gì.
Vòng lặp này chạy trước vòng lặp trò chơi, vì vậy player đã tồn tại khi vòng lặp trò chơi di chuyển nó. Hãy đảm bảo không có dòng nào sau các vòng lặp gán lại giá trị cho player, nếu không, dòng đó sẽ ghi đè giá trị trước đó.
Thử thách
DễĐặt người chơi tại vị trí P trên bản đồ.
- Trong các vòng lặp duyệt bản đồ, với
P, hãy tạoplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28). - Xóa dòng đặt người chơi tại
(40, 40).
Nhấn Chơi: hình vuông màu xanh lá bắt đầu tại ô P. Sau đó nhấn Kiểm tra.
Tự làm thử
import pygame
TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#.C..####...C..#",
"#..............#",
"#....C....##...#",
"#..##.....##.C.#",
"#..##..P.......#",
"#.C.......###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
walls = []
coins = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
elif char == "C":
coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
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)
for coin in coins:
pygame.draw.rect(screen, COIN, coin)
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