Menu
CoddyTech

Mạng

Bài học 14 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.

Mỗi lần trượt nên khiến người chơi mất gì đó. Cho người chơi 3 mạng và trừ đi một mạng mỗi khi một khối rơi qua cạnh dưới. Trong code, bạn đã có sẵn vị trí xử lý việc đó: nhánh block.top > 360.

if block.top > 360:
    block.y = -20
    block.x = random.randint(0, 460)
    lives -= 1

Hiển thị số mạng giống như cách bạn hiển thị điểm số: kết xuất f"Lives: {lives}" ở mỗi khung hình và blit nó ở góc trên bên phải, tại (370, 10).

challenge icon

Thử thách

Dễ

Cho người chơi ba mạng.

  1. Trước vòng lặp, đặt lives = 3.
  2. Trừ đi một mạng khi khối rơi qua mép dưới.
  3. Hiển thị f"Lives: {lives}" bằng màu (240, 240, 240) và vẽ nó tại (370, 10).

Nhấn Chơi và để hụt một khối: màn hình sẽ hiện Lives: 2. Sau đó nhấn Kiểm tra.

Tự làm thử

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0

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

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tất cả bài học trong Tạo trò chơi với Pygame

Tự luyện tập: Playground Pygame