pygame - đồng hồ và hiện bàn phím bấm gì

by Pymier0

Bài trước đã giới thiệu các khái niệm cơ bản trong Pygame và vẽ logo Windows trên Pygame, bài này sẽ hiển thị thời gian hiện tại và ký tự bàn phím người chơi bấm.

Pygame Font

The font module allows for rendering TrueType fonts into Surface objects.

font = pygame.font.SysFont("FreeMono", bold=True, size=30)

Tạo font object từ system font, nếu không có, pygame sẽ dùng font mặc định đi kèm pygame.

# render(text, antialias, color, background=None) -> Surface
quit_surface = font.render("type q to quit", True, (255, 255, 255))

render trả về 1 Surface sau khi đã viết chữ lên, ở đây dùng màu trắng (255,255,255).

Keyboard event

Pygame handles all its event messaging through an event queue

Khi di chuột, bấm chuột, bấm phím, đều sinh ra event. Duyệt qua các event với

for event in pygame.event.get():

lấy event.key tương ứng với ký tự bàn phím ở dạng int, đổi sang str với chr rồi hiển thị ra giữa cửa sổ:

current_char = chr(event.key)
text_surface = font.render(current_char, False, (255, 255, 255))
screen.blit(text_surface, (WIDTH // 2, HEIGHT // 2))

Kết quả

pygame_text

Code

import datetime
import sys

import pygame

pygame.init()

WIDTH, HEIGHT = 600, 800

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Keyboard Echo")

clock = pygame.time.Clock()
font = pygame.font.SysFont("FreeMono", bold=True, size=30)
BACKGROUND = (149, 225, 211)
screen.fill(BACKGROUND)
quit_surface = font.render("type q to quit", True, (255, 255, 255))
current_char = ""

while True:
    screen.fill(BACKGROUND)
    clock_surface = font.render(
        str(datetime.datetime.now()), True, (255, 255, 255)
    )
    screen.blit(quit_surface, (20, 20))
    screen.blit(clock_surface, (20, 60))
    for event in pygame.event.get():
        print(event.type)
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN and event.key < 256:
            print("you hit", chr(event.key), event.key)
            current_char = chr(event.key)
            if event.key == ord("q"):
                pygame.quit()
                sys.exit()

    text_surface = font.render(current_char, False, (255, 255, 255))
    screen.blit(text_surface, (WIDTH // 2, HEIGHT // 2))

    pygame.display.update()
    clock.tick(60)

Kết luận

Pygame giúp hiển thị text dễ dàng.

Hết.

Đăng ký ngay tại PyMI.vn để học Python tại Hà Nội TP HCM (Sài Gòn), trở thành lập trình viên #python chuyên nghiệp ngay sau khóa học.