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
Pygame là một bộ mô-đun Python đa nền tảng được thiết kế để viết trò chơi điện tử. Nó bao gồm các thư viện đồ họa máy tính và âm thanh được thiết kế để sử dụng với ngôn ngữ lập trình Python. Tùy thuộc vào trí tưởng tượng hoặc nhu cầu của nhà phát triển, loại trò chơi nào họ muốn phát triển bằng bộ công cụ này sẽ được quyết định
.
Lệnh cài đặt pygame trên hệ điều hành Windows:
pip install pygame
Có 7 bước cơ bản để hiển thị Văn bản trên cửa sổ pygame:
Tạo đối tượng bề mặt hiển thị bằng phương thức display.set_mode() của pygame.
Tạo đối tượng Font bằng phương thức font.Font() của pygame.
Tạo một đối tượng bề mặt văn bản iesurface trong đó Văn bản được vẽ trên đó, sử dụng phương thức render() của đối tượng phông chữ pygame.
Tạo một đối tượng hình chữ nhật cho đối tượng bề mặt văn bản bằng phương thức get_rect() của đối tượng bề mặt văn bản pygame.
Đặt vị trí của đối tượng hình chữ nhật bằng cách đặt giá trị thuộc tính tâm của đối tượng hình chữ nhật pygame.
Sao chép đối tượng bề mặt văn bản vào đối tượng bề mặt hiển thị bằng phương thức blit() của đối tượng bề mặt hiển thị pygame.
Hiển thị đối tượng bề mặt hiển thị trên cửa sổ pygame bằng phương thức display.update() của pygame.
Dưới đây là cách thực hiện:
# nhập mô-đun pygame trong chương trình này
import pygame
# kích hoạt thư viện pygame
# khởi tạo pygame và cho phép sử dụng
# các chức năng của pygame.
pygame.init()
# định nghĩa giá trị RGB cho màu trắng,
# xanh lá cây, xanh dương.
white = (255, 255, 255)
green = (0, 255, 0)
blue = (0, 0, 128)
# gán giá trị cho biến X và Y
X = 400
Y = 400
# tạo đối tượng bề mặt hiển thị
# với kích thước xác định (X, Y).
display_surface = pygame.display.set_mode((X, Y))
# đặt tên cửa sổ pygame
pygame.display.set_caption('Show Text')
# tạo một đối tượng font.
# Tham số 1 là tệp font có sẵn trong pygame.
# Tham số 2 là kích thước chữ
font = pygame.font.Font('freesansbold.ttf', 32)
# tạo một đối tượng surface chứa văn bản,
# trên đó văn bản sẽ được vẽ.
text = font.render('GeeksForGeeks', True, green, blue)
# tạo một đối tượng hình chữ nhật cho
# đối tượng surface chứa văn bản
textRect = text.get_rect()
# đặt vị trí tâm của đối tượng hình chữ nhật.
textRect.center = (X // 2, Y // 2)
# vòng lặp vô hạn
while True:
# tô đầy đối tượng surface
# với màu trắng hoàn toàn
display_surface.fill(white)
# sao chép đối tượng surface chứa văn bản
# lên bề mặt hiển thị
# tại vị trí tâm.
display_surface.blit(text, textRect)
# lặp qua danh sách các đối tượng sự kiện
# được trả về bởi phương thức pygame.event.get()
for event in pygame.event.get():
# nếu loại sự kiện là QUIT
# thì thoát pygame
# và thoát chương trình.
if event.type == pygame.QUIT:
# tắt thư viện pygame
pygame.quit()
# thoát chương trình
quit()
# vẽ đối tượng surface lên màn hình.
pygame.display.update()
Đầu ra:
Bây giờ chúng ta sẽ thấy một trong những ứng dụng Hiển thị văn bản nhưng theo một cách khác, đó là cuộn văn bản theo 6 cách khác nhau trên cửa sổ pygame.
1. Cuộn văn bản lên trên Màn hình.
2. Cuộn văn bản ở cuối màn hình.
3. Cuộn văn bản ở phía bên trái của Màn hình
4. Cuộn văn bản ở phía bên phải của Màn hình
5. Cuộn văn bản theo đường chéo từ trái sang phải của Màn hình
6. Cuộn văn bản theo đường chéo từ bên phải sang bên trái của Màn hình.
Sau khi xem Mã bên dưới, bạn có thể triển khai mẫu của riêng mình
Dưới đây là phần triển khai
# nhập mô-đun pygame trong chương trình này
import pygame
# kích hoạt thư viện pygame
# khởi tạo pygame và cho phép sử dụng
# các chức năng của pygame.
pygame.init()
# tạo đối tượng bề mặt hiển thị
# (x, y) là chiều rộng và chiều cao cửa sổ pygame
win = pygame.display.set_mode((500, 500))
# đặt tên cửa sổ pygame
pygame.display.set_caption("Scrolling Text")
# thiết lập font chữ (tham số 1 là tên font),
# và kích thước chữ (tham số 2)
Font = pygame.font.SysFont('timesnewroman', 30)
# định nghĩa giá trị RGB cho các màu trắng, vàng, xanh, cam
white = (255, 255, 255)
yellow = (255, 255, 0)
green = (0, 255, 255)
orange = (255, 100, 0)
done = False
# chia văn bản thành các chữ cái riêng lẻ
# tham số 3 là màu chữ và tham số 4 là màu nền
letter1 = Font.render("H", False, orange, yellow)
letter2 = Font.render("E", False, orange, green)
letter3 = Font.render("M", False, orange, yellow)
letter4 = Font.render("A", False, orange, green)
letter5 = Font.render("N", False, orange, yellow)
letter6 = Font.render("T", False, orange, green)
letter7 = Font.render("H", False, orange, yellow)
# gán giá trị cho biến i và c
i = 0
c = 1
# vòng lặp vô hạn
while not done:
if i >= 820:
i = 0
c += 1
pygame.time.wait(500)
# tô đầy bề mặt với màu trắng
win.fill(white)
if c % 6 == 0:
# Cuộn chữ theo đường chéo về bên phải màn hình
# sao chép các chữ lên màn hình tại vị trí tương ứng
win.blit(letter1, (662 - i, -162 + i))
win.blit(letter2, (639 - i, -139 + i))
win.blit(letter3, (608 - i, -108 + i))
win.blit(letter4, (579 - i, -79 + i))
win.blit(letter5, (552 - i, -52 + i))
win.blit(letter6, (529 - i, -29 + i))
win.blit(letter7, (500 - i, 0 + i))
i += 80
if c % 6 == 5:
# Cuộn chữ theo đường chéo về bên trái màn hình
win.blit(letter1, (-162 + i, -162 + i))
win.blit(letter2, (-135 + i, -135 + i))
win.blit(letter3, (-110 + i, -110 + i))
win.blit(letter4, (-79 + i, -79 + i))
win.blit(letter5, (-52 + i, -52 + i))
win.blit(letter6, (-27 + i, -27 + i))
win.blit(letter7, (0 + i, 0 + i))
i += 80
if c % 6 == 4:
# Cuộn chữ dọc từ trên xuống bên phải màn hình
win.blit(letter1, (480, -180 + i))
win.blit(letter2, (480, -150 + i))
win.blit(letter3, (480, -120 + i))
win.blit(letter4, (480, -90 + i))
win.blit(letter5, (480, -60 + i))
win.blit(letter6, (480, -30 + i))
win.blit(letter7, (480, 0 + i))
i += 80
if c % 6 == 3:
# Cuộn chữ dọc từ trên xuống bên trái màn hình
win.blit(letter1, (0, -180 + i))
win.blit(letter2, (0, -150 + i))
win.blit(letter3, (0, -120 + i))
win.blit(letter4, (0, -90 + i))
win.blit(letter5, (0, -60 + i))
win.blit(letter6, (0, -30 + i))
win.blit(letter7, (0, 0 + i))
i += 80
if c % 6 == 1:
# Cuộn chữ ngang từ trái qua phải phía trên
win.blit(letter1, (-124 + i, 0))
win.blit(letter2, (-102 + i, 0))
win.blit(letter3, (-82 + i, 0))
win.blit(letter4, (-58 + i, 0))
win.blit(letter5, (-40 + i, 0))
win.blit(letter6, (-19 + i, 0))
win.blit(letter7, (0 + i, 0))
i += 80
if c % 6 == 2:
# Cuộn chữ ngang từ trái qua phải phía dưới màn hình
win.blit(letter1, (-124 + i, 470))
win.blit(letter2, (-102 + i, 470))
win.blit(letter3, (-82 + i, 470))
win.blit(letter4, (-58 + i, 470))
win.blit(letter5, (-40 + i, 470))
win.blit(letter6, (-19 + i, 470))
win.blit(letter7, (0 + i, 470))
i += 80
# vẽ các đối tượng lên màn hình
pygame.display.update()
# duyệt qua các sự kiện người dùng
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# thời gian chờ 5ms
pygame.time.wait(500)
pygame.quit()
Đầu ra:
1. Khi văn bản đang cuộn trên đầu màn hình
2. Khi văn bản cuộn ở phía dưới màn hình
3. Khi văn bản cuộn ở phía bên trái của màn hình
4. Khi văn bản cuộn ở bên phải màn hình
5. Khi văn bản cuộn theo đường chéo từ bên trái màn hình
6. Khi văn bản cuộn theo đường chéo từ bên phải màn hình
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,....