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
Khi sử dụng Pygame, bề mặt thường được sử dụng để thể hiện diện mạo và vị trí của đối tượng trên màn hình. Tất cả các đối tượng, văn bản, hình ảnh mà chúng ta tạo ra trong Pygame đều được tạo ra bằng bề mặt.
Việc tạo bề mặt trong PyGame khá dễ dàng. Chúng ta chỉ cần truyền chiều cao và chiều rộng bằng một bộ tham số vào phương thức pygame.Surface() . Chúng ta có thể sử dụng nhiều phương thức khác nhau để định dạng bề mặt theo ý muốn. Ví dụ, chúng ta có thể sử dụng pygame.draw() để vẽ hình, hoặc sử dụng phương thức surface.fill() để tô màu cho bề mặt. Bây giờ, hãy cùng tìm hiểu cách triển khai các hàm này. Hãy cùng thảo luận về cú pháp và tham số.
Cú pháp: pygame.surface()
It takes 4 arguments a tuple of width and height, flags, depth, mask.
pygame.draw():
Dùng để vẽ một vật thể, hình dạng.
Cú pháp: Surface.rect(surface, color, rect)
Mã để vẽ hình chữ nhật bằng phương thức pygame.draw.rect() như sau:
# Nhập thư viện
import pygame
import time
# Khởi tạo Pygame
pygame.init()
# Tạo bề mặt
sample_surface = pygame.display.set_mode((400,300))
# Chọn màu đỏ cho hình chữ nhật
color = (255,255,0)
# Vẽ hình chữ nhật
pygame.draw.rect(sample_surface, color,
pygame.Rect(30, 30, 60, 60))
# Phương thức pygame.display.flip() được sử dụng
# để cập nhật nội dung trên màn hình hiển thị
pygame.display.flip()
Đầu ra:
pygame.Surface.fill: Dùng để tô màu cho bề mặt.
Cú Pháp:pygame.Surface.fill(color, rect=None, special_flags=0)
Mã để tô màu cho bề mặt bằng phương thức surface_name.fill() là:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# Tạo bề mặt
sample_surface = pygame.display.set_mode((400,300))
# Chọn màu vàng để tô
color = (255,255,0)
# tô màu lên bề mặt
sample_surface.fill(color)
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
'
Mặc dù chúng ta có thể vẽ hình và tô màu trên bề mặt, nhưng chúng ta vẫn cần có hình ảnh trên bề mặt. Chúng ta có thể dễ dàng tạo ra một bề mặt như vậy với phương thức pygame.image.load(). Phương thức này lấy đường dẫn hình ảnh tương đối hoặc tuyệt đối làm đầu vào.
Cú Pháp: pygame.image.load(img)
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500 ))
# Tạo bề mặt hình ảnh
image = pygame.image.load('gfg_logo.png')
# Hiển thị bề mặt hình ảnh của chúng ta
# bề mặt
display_surface.blit(image,(100,100))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Để hiển thị một bề mặt, nó cần được blit trên màn hình. Blit có thể được hiểu là sao chép các điểm ảnh của một bề mặt sang một bề mặt khác. Chúng ta có thể blit bằng cách sử dụng phương thức surface.blit(), phương thức này lấy một bề mặt cần được blit làm đối số thứ nhất và một bộ tọa độ làm tọa độ thứ hai.
Cú pháp: pygame.Surface.blit(source, dest, area=None, special_flags=0)
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500 ))
# Tạo bề mặt hình ảnh đầu tiên
image1 = pygame.image.load('gfg_logo.png')
# Tạo bề mặt hình ảnh thứ hai
image2 = pygame.image.load('gfg_logo.png')
# đặt bề mặt hình ảnh đầu tiên của chúng ta lên
# bề mặt hiển thị
display_surface.blit(image1,(0,0))
# đặt bề mặt hình ảnh thứ hai của chúng ta lên
# bề mặt hiển thị
display_surface.blit(image1,(300,300))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Bây giờ chúng ta đã thảo luận về một số hàm bề mặt như .blit(), .fill(), v.v. Hãy cùng thảo luận về một số hàm quan trọng hơn của màn hình pygame.
pygame.Surface.convert: Tạo một bản sao của bề mặt với định dạng pixel đã thay đổi. Định dạng pixel mới có thể được xác định từ bề mặt hoặc độ sâu hiện có, có thể sử dụng các đối số cờ và mặt nạ.
Cú Pháp: pygame.Surface.convert(Surface=None)
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# Tạo bề mặt
sample_surface = pygame.display.set_mode((400,300))
# thay đổi định dạng pixel của hình ảnh
pygame.Surface.convert(sample_surface)
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
pygame.Surface.convert_alpha: Tạo một bản sao mới của bề mặt với định dạng pixel mong muốn. Bề mặt mới sẽ có định dạng phù hợp để chuyển đổi nhanh sang định dạng được chỉ định với alpha trên mỗi pixel. Nếu không có bề mặt nào được chỉ định, bề mặt mới sẽ được tối ưu hóa để chuyển đổi sang màn hình hiện tại.
Cú Pháp: pygame.Surface.convert_alpha(Surface)
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# Tạo bề mặt
sample_surface = pygame.display.set_mode((400,300))
# thay đổi định dạng pixel
# của một hình ảnh bao gồm alpha trên mỗi pixel
pygame.Surface.convert_alpha(sample_surface)
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
pygame.Surface.copy: Lệnh này tạo một bản sao mới của bề mặt. Bề mặt sao chép sẽ có cùng định dạng pixel, bảng màu, thiết lập độ trong suốt và lớp như bản gốc.
Cú pháp: pygame.Surface.copy()
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# Tạo bề mặt
sample_surface = pygame.display.set_mode((400,300))
# tạo một bản sao của sample_surface
# và đặt tên là copied_surface
copied_surface=pygame.Surface.copy(sample_surface)
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
pygame.Surface.set_colorkey: Đặt khóa màu hiện tại cho bề mặt. Khi tô màu bề mặt này lên điểm đến, bất kỳ pixel nào có cùng màu với khóa màu sẽ trở nên trong suốt.
Cú Pháp: set_colorkey(Color, flags=0)
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500 ))
# Tạo bề mặt hình ảnh
image = pygame.image.load('gfg_logo.png')
# đưa bề mặt hình ảnh của chúng ta lên bề mặt hiển thị
# làm cho phần màu trắng
# của bề mặt trở nên trong suốt
pygame.Surface.set_colorkey (image, [255,255,255])
display_surface.blit(image,(100,100))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Đầu ra của đoạn mã trên sẽ là logo geeksforgeeks trên bề mặt màu đen với điểm ảnh màu trắng được đổi thành trong suốt.
pygame.Surface.get_colorkey: Trả về giá trị khóa màu hiện tại của Surface. Nếu khóa màu chưa được thiết lập, thì None sẽ được trả về.
Cú pháp: get_colorkey()
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500))
# Tạo bề mặt hình ảnh
image = pygame.image.load('gfg_logo.png')
# đưa bề mặt hình ảnh của chúng ta lên bề mặt hiển thị
# làm cho phần màu trắng của bề mặt
# trở nên trong suốt
pygame.Surface.set_colorkey(image, [255, 255, 255])
# in giá trị khóa màu cho bề mặt
print(pygame.Surface.get_colorkey(image))
display_surface.blit(image, (100, 100))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Đầu ra của đoạn mã trên sẽ là một cửa sổ hiển thị nhiều bề mặt khác nhau như trong ví dụ get_colorkey cũng như giá trị colorkey cũng sẽ được in ra.
pygame.Surface.set_alpha: Giá trị alpha được thiết lập cho toàn bộ ảnh bề mặt. Truyền 0 cho ảnh vô hình và 255 cho ảnh hoàn toàn mờ đục.
Cú Pháp: set_alpha(value, flags=0) or set_alpha(None)
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500 ))
# Tạo bề mặt hình ảnh
image = pygame.image.load('gfg_logo.png')
# đưa bề mặt hình ảnh của chúng ta lên bề mặt hiển thị
# đặt giá trị alpha của bề mặt là 100
pygame.Surface.set_alpha(image, 100)
display_surface.blit(image,(100,100))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Đầu ra của đoạn mã trên sẽ là logo geeksforgeeks, trông hơi trong suốt vì chúng ta đã thay đổi giá trị alpha thành 100.
pygame.Surface.get_alpha: Trả về giá trị alpha hiện tại của bề mặt.
Cú pháp: get_alpha()
Code:
# Nhập thư viện
import pygame
# Khởi tạo Pygame
pygame.init()
# tạo bề mặt hiển thị
display_surface = pygame.display.set_mode((500, 500 ))
# Tạo bề mặt hình ảnh
image = pygame.image.load('gfg_logo.png')
# đưa bề mặt hình ảnh của chúng ta lên bề mặt hiển thị
# đưa giá trị alpha của bề mặt hình ảnh lên 100
pygame.Surface.set_alpha(image, 100)
# printing the alpha value of the surface
print(pygame.Surface.get_alpha(image))
display_surface.blit(image,(100,100))
# cập nhật màn hình
pygame.display.flip()
Đầu ra:
Đầu ra của đoạn mã trên sẽ là một cửa sổ hiển thị nhiều bề mặt khác nhau như trong ví dụ set_alpha cũng như giá trị alpha cũng sẽ được in ra.
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,....