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 thư viện Python phổ biến dành cho phát triển trò chơi và đa phương tiện, được xây dựng dựa trên thư viện SDL. Một trong những thao tác đồ họa cơ bản nhất trong Pygame là vẽ các hình dạng, chẳng hạn như hình chữ nhật. Hình chữ nhật rất cần thiết để tạo nút, khung, đối tượng trò chơi, v.v. Đây là các hàm chính để vẽ hình chữ nhật.
Chức năng | Mục đích |
---|---|
pygame.display.set_mode() | Khởi tạo cửa sổ hiển thị hoặc bề mặt nơi đồ họa được hiển thị. Lấy kích thước cửa sổ làm tham số. |
pygame.display.flip() | Cập nhật toàn bộ màn hình để hiển thị mọi thay đổi được vẽ trên bề mặt. |
pygame.draw.rect() | Vẽ hình chữ nhật trên một bề mặt nhất định. Lấy bề mặt, màu sắc, tọa độ hình chữ nhật và chiều rộng đường viền tùy chọn. |
Cú pháp cơ bản để vẽ hình chữ nhật là:
pygame.draw.rect(surface, color, rect, width=0)
Các thông số:
surface: Bề mặt hoặc màn hình nơi hình chữ nhật sẽ được vẽ.
color: Màu của hình chữ nhật ở định dạng RGB. Ví dụ: (255, 0, 0) là màu đỏ.
rect: Một đối tượng pygame.Rect hoặc một bộ chỉ định (x, y, chiều rộng, chiều cao).
width (optional): Độ dày của đường viền. Nếu chiều rộng = 0 (mặc định), hình chữ nhật sẽ được tô màu. Nếu là số dương, chỉ có đường viền được vẽ.
Ví dụ 1: Ở đây, chúng ta vẽ một hình vuông màu hồng được tô đầy tại vị trí (30, 30) với chiều rộng và chiều cao là 60 pixel.
import pygame
pygame.init()
surface = pygame.display.set_mode((400, 300)) # window
color = (255, 192, 203)
pygame.draw.rect(surface, color, pygame.Rect(30, 30, 60, 60))
pygame.display.flip()
pygame.time.wait(3000) # Tạm dừng trong 3 giây
pygame.quit()
Đầu ra
Hình vuông màu hồng đã tô
Giải thích :
pygame.draw.rect(surface, color, pygame.Rect(30, 30, 60, 60)) vẽ một hình chữ nhật được tô màu tại vị trí (30, 30) với chiều rộng 60 và chiều cao 60.
pygame.display.flip() cập nhật màn hình để hiển thị hình chữ nhật đã vẽ.
pygame.time.wait(3000) giữ cửa sổ mở trong 3 giây.
Ví dụ 2: Ở đây, chúng ta vẽ một hình chữ nhật màu đỏ chỉ có đường viền dày 2 pixel và không có phần tô màu bên trong.
import pygame
pygame.init()
surface = pygame.display.set_mode((400, 300)) # window
color = (255, 0, 0)
# Draw rectangle border (width=2)
pygame.draw.rect(surface, color, pygame.Rect(30, 30, 60, 60), 2)
pygame.display.flip()
pygame.time.wait(3000)
pygame.quit()
Đầu ra
Đường viền hình chữ nhật màu đỏ
Giải thích:
pygame.draw.rect(....) vẽ một đường viền hình chữ nhật (không tô màu) tại vị trí (30, 30) với chiều rộng 60 và chiều cao 60. Số 2 chỉ định độ dày của đường viền tính bằng pixel.
Cập nhật màn hình để hiển thị hình chữ nhật, đợi 3 giây rồi đóng cửa sổ Pygame.
Ví dụ 3: Ở đây, chúng ta vẽ ba hình chữ nhật: một hình chữ nhật tô màu đỏ, một hình chữ nhật có đường viền màu xanh lá cây 5 pixel và một hình chữ nhật có đường viền màu xanh lam 10 pixel.
import pygame
pygame.init()
surface = pygame.display.set_mode((500, 400))
# màu sắc
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
pygame.draw.rect(surface, red, pygame.Rect(50, 50, 100, 80))
pygame.draw.rect(surface, green, pygame.Rect(200, 50, 100, 80), 5)
pygame.draw.rect(surface, blue, pygame.Rect(350, 50, 100, 80), 10)
pygame.display.flip()
pygame.time.wait(4000)
pygame.quit()
Đầu ra
Nhiều hình chữ nhật được hiển thị
Giải thích:
pygame.draw.rect(...) vẽ ba hình chữ nhật ở phía trên cùng của màn hình, một hình chữ nhật màu đỏ được tô đầy, một hình chữ nhật màu xanh lá cây có đường viền 5px và một hình chữ nhật màu xanh lam có đường viền 10px, mỗi hình chữ nhật có vị trí và kích thước được chỉ định bằng pygame.Rect().
Hiển thị tất cả các hình chữ nhật trên cửa sổ, giữ cửa sổ mở trong 4 giây rồi đóng lại.
Ví dụ 4: Ở đây, chúng ta tạo hiệu ứng động cho một hình chữ nhật màu xanh di chuyển từ trái sang phải trên màn hình theo vòng lặp.
import pygame
pygame.init()
w, h = 600, 200 # kích thước
s = pygame.display.set_mode((w, h))
c_white, c_blue = (255,255,255), (0,0,255) # màu sắc
x, y, rw, rh, spd = 0, 50, 60, 40, 5 # tham số trực tiếp
clk = pygame.time.Clock() # Đồng hồ
run = True
while run:
for e in pygame.event.get():
if e.type == pygame.QUIT:
run = False
s.fill(c_white)
pygame.draw.rect(s, c_blue, (x, y, rw, rh))
x = (x + spd) % (w + rw) - rw
pygame.display.flip()
clk.tick(30)
pygame.quit()
Đầu ra
Hình chữ nhật chuyển động động
Giải thích:
Vòng lặp while giữ chương trình hoạt động cho đến khi cửa sổ được đóng, xử lý các sự kiện và cập nhật màn hình bằng cách xóa màn hình và vẽ hình chữ nhật màu xanh di chuyển bao quanh theo chiều ngang.
pygame.display.flip() làm mới màn hình mỗi khung hình, trong khi clk.tick(30) giới hạn tốc độ khung hình ở mức 30 FPS để có hình ảnh động mượt mà.
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,....