Cách vẽ hình và đối tượng trong Pygame | Học CNTT cùng FUNiX

Cách vẽ hình và đối tượng trong Pygame

Chia sẻ kiến thức 05/08/2023

PyGame là một thư viện phát triển game mạnh mẽ phổ biến dành cho Python. Nó cung cấp một bộ công cụ và chức năng giúp tạo game và các ứng dụng tương tác khác dễ dàng hơn. Một tính năng hữu ích của PyGame là khả năng vẽ các hình và đối tượng. 

 

Mô-đun pygame.draw

Trong PyGame, việc vẽ các hình và đối tượng là một quy trình đơn giản. Bạn có thể sử dụng mô-đun pygame.draw để vẽ các hình như hình chữ nhật, hình tròn, đường thẳng, v.v.

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình, sau đó sử dụng lệnh này để cài đặt mô-đun PyGame:

 
pip install pygame

Vẽ các hình cơ bản

Mô -đun pygame.draw cung cấp một số chức năng cho phép bạn vẽ các hình cơ bản. Mỗi chức năng có một bộ tham số để xác định hình dạng và vị trí của nó.

  • rect(): Bạn có thể vẽ một hình chữ nhật bằng chức năng này. Đây là một trong những hình phổ biến nhất trong game. Bạn có thể tạo bệ, tường và các đối tượng khác bằng hình chữ nhật. Hàm nhận bốn tham số: bề_mặt (bề mặt để vẽ hình chữ nhật), màu_sắc, rect (một đối tượng Rect) và chiều_rộng (độ dày của đường kẻ).
    pygame.draw.rect(bề_mặt, màu_sắc, rect, chiều_rộng)
  • circle(): Vẽ hình tròn. Nó có bốn tham số: bề_mặt, màu sắc, vị trí (tâm của vòng tròn) và bán kính.
    pygame.draw.circle(bề_mặt, màu_sắc, pos, bán_kính)
  • polygon(): Vẽ một đa giác. Nó nhận bốn tham số: bề mặt, màu sắc, điểm (danh sách các điểm xác định hình dạng của đa giác) và chiều rộng.
    pygame.draw.polygon(bbề_mặt, màu_sắc, điểm, chiều_rộng) 
  • line(): Vẽ một đường thẳng. Nó có bốn tham số: bề mặt, màu sắc, start_pos và end_pos.
    pygame.draw.line(bề_mặt, màu_sắc, start_pos, end_pos) 
 

Bạn có thể tìm thấy danh sách đầy đủ các chức năng và tham số của chúng trên tài liệu chính thức của PyGame dành cho mô-đun vẽ.

Vẽ hình phức tạp

Ngoài các hình cơ bản, PyGame cũng cho phép bạn vẽ các hình phức tạp như hình cung, hình elip và đường aalines.

  • arc(): Chức năng này vẽ một vòng cung (một phần của một vòng tròn) trên một bề mặt. Nó có sáu tham số: bề_mặt, màu_sắc rect, góc_bắt_đầu, góc_kết_thúc và chiều_rộng. Chỉ định các góc theo độ, với 0 độ chỉ về bên phải và tăng dần theo chiều kim đồng hồ. Tham số width chỉ định độ dày của cung.
    pygame.draw.arc(bề_mặt, màu_sắc, rect, góc_bắt_đầu, góc_kết_thúc, chiều_rộng)
  • ellipse(): Vẽ một hình elip trên một bề mặt. Một hình elip là một vòng tròn kéo dài. Nó có bốn tham số: bề_mặt, màu_sắc, rect và chiều_rộng.
    pygame.draw.ellipse(bề_mặt, màu_sắc, rect, chiều_rộng)
  • aaline(): Sử dụng để vẽ một đường khử răng cưa trên một bề mặt. Khử răng cưa là một kỹ thuật được sử dụng để làm mịn các cạnh của hình dạng, để nó trông tự nhiên hơn. Nó có bốn tham số phản ánh hàm line(): bề_mặt, màu_sắc, start_pos và end_pos.
    pygame.draw.aaline(bề_mặt, màu_sắc, start_pos, end_pos) 

Tạo các hình lồng nhau trong PyGame

Một tính năng thú vị khác của PyGame là khả năng vẽ các hình bên trong một hình khác. Bạn có thể làm như vậy bằng cách sử dụng kết hợp các chức năng vẽ hình cơ bản trong PyGame.

Để vẽ một hình bên trong một hình khác, trước tiên bạn có thể vẽ hình bên trong, sau đó vẽ hình bên ngoài lên trên hình đó. Hình bên trong có thể là bất kỳ hình cơ bản nào, chẳng hạn như hình chữ nhật hoặc hình tròn.

Ví dụ: để vẽ hình chữ nhật bên trong hình tròn, bạn có thể sử dụng hàm pygame.draw.circle() để vẽ hình tròn, sau đó sử dụng hàm pygame.draw.rect() để vẽ hình chữ nhật bên trên hình tròn đó.

Bạn có thể tìm thấy các mẫu mã sau trong repo GitHub này .

Đây là đoạn code ví dụ minh họa cách vẽ hình chữ nhật bên trong hình tròn:

import pygame

# Initialize pygame
pygame.init()

# Create a window
window = pygame.display.set_mode((800, 600))

# Create a circle
circle_rect = pygame.draw.circle(window, (255, 255, 255), (400, 300), 100)

# Create a surface for the rectangle
rectangle_surface = pygame.Surface((50, 50))
rectangle_surface.set_colorkey((0, 0, 0))

# Draw the rectangle on the surface
pygame.draw.rect(rectangle_surface, (255, 0, 0), (0, 0, 50, 50))

# Blit the surface onto the circle
window.blit(rectangle_surface, (375, 275))

# Main loop
while True:
    # Quitting the game
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # Update the display
    pygame.display.update()

Điều này tạo ra hiệu ứng của một hình chữ nhật bên trong một hình tròn. Bạn có thể sử dụng kỹ thuật này để tạo các hình và thành phần game phức tạp hơn bằng cách kết hợp nhiều hình.

 
trò chơi với một hình chữ nhật màu đỏ được vẽ bên trong một vòng tròn màu trắng

Vẽ hình ảnh

PyGame cũng cho phép bạn vẽ hình ảnh. Bạn có thể sử dụng hàm pygame.image.load() để tải hình ảnh từ một tệp và hàm pygame.image.blit() để vẽ hình ảnh trên màn hình.

Cú pháp của pygame.image.load() như sau:

pygame.image.load(filename) 

Và đây là cú pháp cho pygame.image.blit() :

pygame.image.blit(image, rect) 

Ngoài việc tải và vẽ hình ảnh, PyGame còn cung cấp một số chức năng khác liên quan đến hình ảnh. Các chức năng này cho phép bạn thao tác với hình ảnh theo nhiều cách khác nhau, chẳng hạn như chia tỷ lệ, xoay, lật và cắt.

Thêm tính năng nâng cao

PyGame cũng cung cấp một số tính năng nâng cao để vẽ các đối tượng và hình. Ví dụ: bạn có thể sử dụng hàm pygame.mouse.get_pos() để lấy vị trí chuột và hàm pygame.mouse.get_press() để lấy trạng thái của nút chuột. Với các chức năng này, bạn có thể tạo tính năng nhấp để vẽ cho phép bạn vẽ các hình bằng cách nhấp chuột.

 
import pygame 

# Initialize pygame 
pygame.init() 

# Create a window 
window = pygame.display.set_mode((800, 600)) 

# Main loop 
while True: 
    # Get the mouse position 
    mouse_position = pygame.mouse.get_pos() 

    # Get the mouse button state 
    mouse_pressed = pygame.mouse.get_pressed() 

    # Quitting the game
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            pygame.quit() 
            exit() 

    # Drawing a circle when mouse is pressed 
    if mouse_pressed[0] == 1: 
        pygame.draw.circle(window, (255, 0, 0), mouse_position, 20) 

    # Update the display 
    pygame.display.update()

Dưới đây là đầu ra:

màn hình trò chơi với các vòng tròn màu đỏ được vẽ bằng chuột

Tìm hiểu ngay chương trình học công nghệ thông tin trực tuyến tại FUNiX ở đây:

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/pygame-drawing-objects-shapes/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại