Xây dựng và trực quan hóa trò chơi Sudoku bằng Pygame
Sudoku là một trò chơi giải đố sắp xếp số dựa trên logic, kết hợp. Mục tiêu là...
Category: Pygame
Trong bài viết này, chúng ta sẽ xem cách thêm sự kiện tùy chỉnh trong PyGame .
Thư viện PyGame có thể được cài đặt bằng lệnh bên dưới:
pip install pygame
Mặc dù PyGame đi kèm với một bộ sự kiện (ví dụ: KEYDOWN và KEYUP), nó cho phép chúng ta tạo các sự kiện tùy chỉnh bổ sung theo yêu cầu của trò chơi. Sự kiện tùy chỉnh giúp tăng khả năng kiểm soát và tính linh hoạt của chúng ta đối với trò chơi. Sự kiện tùy chỉnh cũng giống như việc tạo sự kiện do người dùng định nghĩa.
Cú pháp:
<event_name> = pygame.USEREVENT + 1
Ví dụ:
# Ở đây, tên sự kiện là CỘNG và TRỪ
ADDITION = pygame.USEREVENT + 1
SUBTRACTION = pygame.USEREVENT + 2
Bây giờ, làm thế nào để xuất bản các sự kiện tùy chỉnh sau khi chúng được tạo? Có thể thực hiện theo hai cách:
Sử dụng phương thức pygame.event.post() .
Sử dụng phương thức pygame.time.set_timer() .
Chúng ta có thể đăng trực tiếp sự kiện bằng phương thức pygame.event.post() . Phương thức này sẽ thêm sự kiện của chúng ta vào cuối các sự kiện trong hàng đợi. Để thực hiện điều này, chúng ta cần chuyển đổi sự kiện sang kiểu sự kiện của Pygame để khớp với các thuộc tính của phương thức đăng và tránh lỗi.
Cú pháp:
# Bước 1 - Chuyển đổi sự kiện thành kiểu dữ liệu sự kiện của pygame
ADD_event = pygame.event.Event(event)
# Bước 2 - Đăng sự kiện
pygame.event.post(ADD_event) # event_name as parameter
Phát sóng sự kiện định kỳ bằng bộ đếm thời gian PyGame. Ở đây, chúng ta sẽ sử dụng một phương pháp khác để phát hành sự kiện bằng hàm set_timer() , hàm này nhận hai tham số: tên sự kiện người dùng và khoảng thời gian tính bằng mili giây.
Cú pháp:
# event_name, thời gian tính bằng ms
pygame.time.set_timer(event, duration)
Lưu ý: Trong trường hợp này, chúng ta không cần phải chuyển đổi sự kiện do người dùng xác định thành kiểu dữ liệu sự kiện PyGame.
Bây giờ, để tạo một biểu đồ với các sự kiện tùy chỉnh, trước tiên hãy thiết lập các thuộc tính cho màn hình theo yêu cầu. Sau đó, hãy tạo một sự kiện và chuyển đổi nó sang kiểu dữ liệu sự kiện PyGame. Tiếp theo, hãy thêm mã cho các thao tác sẽ tạo ra một sự kiện tùy chỉnh.
Trong quá trình triển khai đã nêu, cả hai cách tiếp cận đều đã được xử lý.
Chương trình :
# Chương trình Python để thêm các sự kiện tùy chỉnh
import pygame
pygame.init()
# Thiết lập màn hình và bộ đếm thời gian
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
# Đặt tiêu đề cửa sổ
pygame.display.set_caption('Sự kiện tùy chỉnh')
# Định nghĩa các màu
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# Theo dõi trạng thái màu nền hiện tại
bg_active_color = WHITE
screen.fill(WHITE)
# Sự kiện người dùng tùy chỉnh để thay đổi màu sắc
CHANGE_COLOR = pygame.USEREVENT + 1
# Sự kiện người dùng tùy chỉnh để phóng to/thu nhỏ hình hộp
ON_BOX = pygame.USEREVENT + 2
# Tạo hình chữ nhật
box = pygame.Rect((225, 225, 50, 50))
grow = True
# Gửi một sự kiện để thay đổi màu sau mỗi 500 mili giây
pygame.time.set_timer(CHANGE_COLOR, 500)
running = True
while running:
# Kiểm tra các sự kiện đã được gửi
# và dựa vào đó thực hiện các hành động cần thiết
for event in pygame.event.get():
# Thay đổi màu sắc sau mỗi 500 mili giây
if event.type == CHANGE_COLOR:
if bg_active_color == GREEN:
screen.fill(GREEN)
bg_active_color = WHITE
elif bg_active_color == WHITE:
screen.fill(WHITE)
bg_active_color = GREEN
if event.type == ON_BOX:
# Phóng to và thu nhỏ hình hộp
if grow:
box.inflate_ip(3, 3)
grow = box.width < 75
else:
box.inflate_ip(-3, -3)
grow = box.width < 50
if event.type == pygame.QUIT:
# Thoát khỏi chương trình
running = False
# Gửi sự kiện khi con trỏ chuột nằm trên hình hộp
if box.collidepoint(pygame.mouse.get_pos()):
pygame.event.post(pygame.event.Event(ON_BOX))
# Vẽ hình chữ nhật lên màn hình
pygame.draw.rect(screen, RED, box)
# Cập nhật màn hình
pygame.display.update()
# Thiết lập số khung hình mỗi giây
timer.tick(30)
pygame.quit()
Đầu ra:
Trong phần triển khai ở trên, chúng ta đã sử dụng phương thức .post() để bơm phồng/xẹp hộp khi con trỏ ở trên cùng của hộp và phương thức .set_timer() để chuyển màu nền sau mỗi 500ms.
Published on Jul 28, 2025
Sudoku là một trò chơi giải đố sắp xếp số dựa trên logic, kết hợp. Mục tiêu là điền các chữ số vào lưới 9x9 sao cho mỗi cột, mỗi hàng và mỗi ô lưới....
Thuật toán như Tìm kiếm Nhị phân có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toá...
Thuật toán sắp xếp chèn có thể dễ dàng được hiểu bằng cách trực quan hóa. Trong bài viết này, một chương trình trực quan hóa thuật toán sắp xếp ch...
Thuật toán sắp xếp Heap có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toán sắp xếp...
Thuật toán như Tìm kiếm Tam phân có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toá...
Trong bài viết này, chúng ta sẽ xem cách hình dung thuật toán sắp xếp nổi bọt (bubble sort ) bằng PyGame. Cụ thể, khi khởi động ứng dụng PyGame,....