Làm thế nào để vẽ hình chữ nhật trong Pygame?

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ụ

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

Đầ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

Đầ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

Đầ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

Đầ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

Related Posts