Menu
CoddyTech

Điểm số có số 0

Thuộc phần Luật chơi trong hành trình Pygame của Coddy. Bài học 9 trên 30.

Trò chơi arcade hiển thị điểm số với các số 0 ở phía trước: 00042. Điểm số luôn có năm chữ số, nên nó chiếm gần như cùng một khoảng trống từ điểm đầu tiên đến điểm mười nghìn, trông giống như một bộ đếm.

F-string có thể thêm số 0 đệm vào một số. Sau giá trị, dấu hai chấm bắt đầu định dạng: 0 nghĩa là thêm số 0 đệm và 5 là độ rộng:

f"{42:05}"     # "00042"
f"{7:03}"      # "007"
f"{123456:05}" # "123456", không bao giờ bị cắt bớt

Nếu không có 0, f"{42:5}" sẽ thêm khoảng trắng đệm: " 42". Số dài hơn độ rộng sẽ không bao giờ bị cắt, nó chỉ rộng hơn.

Với năm chữ số, tấm bảng phía sau điểm số vẫn giữ kích thước gần như không đổi trong suốt trò chơi.

challenge icon

Thử thách

Dễ

Hiển thị điểm số bằng năm chữ số, như trong trò chơi điện tử thùng.

  1. Vẽ điểm số với các số 0 thêm vào đầu để đủ năm chữ số, không có nội dung nào khác trong văn bản.
  2. Ban đầu, điểm số là 00000 và sau ba tảng đá, điểm số là 00003.

Nhấn Chơi: điểm số là 00000, sau đó tăng dần. Rồi 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("Meteor Dodge")
clock = pygame.time.Clock()
heart = pygame.image.load("assets/images/heart.png").convert_alpha()
heart_empty = pygame.image.load("assets/images/heart_empty.png").convert_alpha()
font = pygame.font.Font("assets/fonts/pixel.ttf", 24)
big_font = pygame.font.Font("assets/fonts/pixel.ttf", 48)
WHITE = (240, 240, 240)
PLATE = (60, 60, 90)


def reset():
    global player, rock, score, lives
    player = pygame.Rect(220, 300, 40, 40)
    rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
    score = 0
    lives = 3


def draw_menu():
    screen.fill((30, 30, 46))
    title = big_font.render("Meteor Dodge", True, WHITE)
    title_rect = title.get_rect(center=(240, 140))
    pygame.draw.rect(screen, PLATE, title_rect.inflate(24, 12))
    screen.blit(title, title_rect)
    hint = font.render("Press Enter to play", True, WHITE)
    screen.blit(hint, hint.get_rect(center=(240, 200)))


def draw_game():
    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 196, 0), player)
    pygame.draw.rect(screen, (235, 80, 80), rock)
    score_text = font.render(f"Score: {score}", True, WHITE)
    score_rect = score_text.get_rect(topright=(470, 10))
    pygame.draw.rect(screen, PLATE, score_rect.inflate(12, 8))
    screen.blit(score_text, score_rect)
    for i in range(3):
        if i < lives:
            screen.blit(heart, (10 + i * 40, 10))
        else:
            screen.blit(heart_empty, (10 + i * 40, 10))


def play_frame():
    global score, lives, state
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 6
    if keys[pygame.K_RIGHT]:
        player.x += 6
    player.clamp_ip(screen.get_rect())

    rock.y += 4
    if rock.top > 360:
        rock.y = -24
        rock.x = random.randint(0, 456)
        score += 1
    if rock.colliderect(player):
        rock.y = -24
        rock.x = random.randint(0, 456)
        lives -= 1
        if lives == 0:
            state = "over"
    draw_game()


def draw_over():
    draw_game()
    message = big_font.render("Game over", True, WHITE)
    screen.blit(message, message.get_rect(center=(240, 160)))
    hint = font.render("Press R to play again", True, WHITE)
    screen.blit(hint, hint.get_rect(center=(240, 200)))


reset()
state = "menu"

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN and state == "menu":
                state = "play"
            elif event.key == pygame.K_r and state == "over":
                reset()
                state = "play"

    if state == "menu":
        draw_menu()
    elif state == "play":
        play_frame()
    else:
        draw_over()
    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 Luật chơi

Tự luyện tập: Playground Pygame