Menu
CoddyTech

Hoàn thiện trò chơi

Thuộc phần Dự án trong hành trình Pygame của Coddy. Bài học 33 trên 33.

Tiếp theo là các bước 3 đến 5: một thử thách, phần kết và văn bản. Rock Dodge lưu các tảng đá trong một danh sách Rect: cứ 400 ms lại có một tảng đá mới, nhiều tảng cùng xuất hiện trên màn hình.

rocks = []

# Khi có sự kiện hẹn giờ NEW_ROCK:
rocks.append(pygame.Rect(random.randint(0, 450), -30, 30, 30))

# Ở mỗi khung hình:
for rock in rocks:
    rock.y += 5
    if rock.colliderect(player):
        state = "lost"
rocks = [rock for rock in rocks if rock.top < 360]

Dòng cuối là cú pháp rút gọn tạo danh sách: một danh sách mới chỉ chứa những tảng đá vẫn còn trên màn hình, nhờ đó danh sách không dài ra mãi.

Chuỗi state với các giá trị "playing", "lost" hoặc "won" quyết định mỗi khung hình sẽ làm gì, giống như trong Sky Runner. Còn pygame.time.get_ticks() cho biết số mili giây kể từ khi trò chơi bắt đầu, nhờ đó bạn có thể tạo bộ đếm thời gian: sống sót trong 20 giây để chiến thắng.

Trò chơi của bạn có thể dùng mọi thứ trong hành trình: Group sprite thay cho danh sách, hình ảnh, âm thanh khi va chạm, nhạc, menu trước khi chơi, điểm cao, các căn phòng được tạo từ bản đồ văn bản.

Hãy tạo trò chơi theo phong cách riêng: thay đổi màu sắc, tốc độ và luật chơi. Sau đó chơi thử. Nếu quá khó để thắng hoặc bạn thua quá nhanh, hãy thay đổi các con số cho đến khi trò chơi trở nên thú vị.

challenge icon

Thử thách

Dễ

Hoàn thiện trò chơi của bạn.

  1. Thêm thứ gì đó tự di chuyển.
  2. Hiển thị văn bản trên màn hình, chẳng hạn như điểm số hoặc đồng hồ bấm giờ.
  3. Thêm phần kết: cách để thắng, cách để thua hoặc cả hai.

Nhấn Chơi: một thứ gì đó tự di chuyển và văn bản của bạn hiển thị. Sau đó, nhấn Kiểm tra.

Tự làm thử

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Rock Dodge")
clock = pygame.time.Clock()

player = pygame.Rect(220, 320, 40, 20)

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 -= 7
    if keys[pygame.K_RIGHT]:
        player.x += 7
    player.clamp_ip(screen.get_rect())

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Dự án

Tự luyện tập: Playground Pygame