Menu
CoddyTech

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 đó.

challenge icon

Thử thách

Dễ

Đặt người chơi tại vị trí P trên bản đồ.

  1. Trong các vòng lặp duyệt bản đồ, với P, hãy tạo player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28).
  2. 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

Tự luyện tập: Playground Pygame