Pygame - Xử lý đầu vào

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.

Mô -đun sys trong Python cung cấp nhiều hàm và biến khác nhau được sử dụng để thao tác các phần khác nhau của môi trường chạy Python. Nó cho phép vận hành trên trình thông dịch vì nó cung cấp quyền truy cập vào các biến và hàm tương tác mạnh mẽ với trình thông dịch.

Xử lý đầu vào bàn phím

Các bước cơ bản để xử lý dữ liệu nhập từ bàn phím:

  • Nhập các thư viện cần thiết.

  • Tạo đối tượng bề mặt hiển thị bằng phương thức display.set_mode() của pygame.

  • Tải hình ảnh/đối tượng.

  • Tạo sự kiện nhấp chuột, ví dụ: KEYDOWN

  • Xác định tất cả các phím sự kiện và thực hiện nhiệm vụ.

  • Tạo sự kiện tạm dừng tức là KEYUP

  • 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.

Ví dụ:

# nhập tất cả các thư viện cần thiết
import pygame
from pygame.locals import *
from sys import exit

# khởi tạo thư viện pygame để sử dụng các chức năng của nó
pygame.init()

# khai báo kích thước cửa sổ/mặt phẳng hiển thị
size = width, height = 740, 480
screen = pygame.display.set_mode(size)

# tải hình ảnh mới từ tệp và convert()
# sẽ tạo một bản sao hình ảnh trên surface
img = pygame.image.load("char.png").convert()

# khai báo giá trị cho các biến
x, y = 0, 0
move_x, move_y = 0, 0

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            # pygame.QUIT để tắt pygame
            exit()
            # exit() là hàm của sys để thoát khỏi chương trình
            
    # Sự kiện KEYDOWN sẽ được kích hoạt mỗi khi 
    # ta nhấn một phím
    if event.type == KEYDOWN:  
      
        if event.key == K_LEFT:  
            move_x = -0.3  # đối tượng di chuyển -0.3 theo trục x
            print("pressed LEFT")
        elif event.key == K_RIGHT:  
            move_x = +0.3  # đối tượng di chuyển +0.3 theo trục x
            print("pressed RIGHT")
        elif event.key == K_UP: 
            move_y = -0.3  # đối tượng di chuyển -0.3 theo trục y
            print("pressed UP")
        elif event.key == K_DOWN: 
            move_y = +0.3  # đối tượng di chuyển +0.3 theo trục y
            print("pressed DOWN")
            
        # Sự kiện K_LCTRL sẽ được kích hoạt mỗi khi
        # nhấn phím CTRL bên trái
        elif event.key == K_LCTRL:
          
            # khai báo tệp hình ảnh mới để cập nhật hình ảnh
            # mỗi khi nhấn CTRL trái
            img = pygame.image.load("char1.png")
            pygame.display.update()  # cập nhật hình ảnh
        elif event.key == K_BACKSPACE:
          
            # đây là hình ảnh mặc định đã khai báo lúc đầu
            # và sẽ khôi phục lại mỗi khi nhấn phím backspace
            img = pygame.image.load("char.png")
            pygame.display.update()  # cập nhật hình ảnh
            
    # sẽ được kích hoạt khi nhả phím
    if event.type == KEYUP:
        if event.key == K_LEFT:
            move_x = 0  # dừng di chuyển
        elif event.key == K_RIGHT:  
            move_x = 0  # dừng di chuyển
        elif event.key == K_UP: 
            move_y = 0  # dừng di chuyển
        elif event.key == K_DOWN:  
            move_y = 0  # dừng di chuyển
            """Sự kiện KEYUP sẽ được kích hoạt khi thả phím 
            và tọa độ x, y sẽ không thay đổi nữa"""

    x += move_x
    y += move_y
    # cập nhật giá trị tọa độ x, y
    screen.fill((255, 255, 255))
    
    # hàm này sẽ tô nền bằng màu trắng
    screen.blit(img, (x, y))
    
    # hàm blit() sẽ sao chép hình ảnh đến vị trí tọa độ x, y.
    pygame.display.update()
    # vẽ các đối tượng lên màn hình

Đầu ra:

Xử lý đầu vào chuột:

Các bước cơ bản để xử lý đầu vào chuột:

  • Nhập các thư viện cần thiết.

  • Tạo đối tượng bề mặt hiển thị bằng phương thức display.set_mode() của pygame.

  • Tải hình ảnh/đối tượng.

  • Tạo sự kiện nhấp chuột, ví dụ: MOUSEBUTTONDOWN.

  • Xác định tất cả các phím sự kiện và thực hiện nhiệm vụ.

  • Tạo sự kiện tạm dừng, ví dụ: MOUSEBUTTONUP.

  • 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.

Ví dụ:

# nhập tất cả các thư viện cần thiết
import pygame
from pygame.locals import *
from sys import exit

# khởi tạo thư viện pygame để sử dụng các chức năng của nó
pygame.init()

# khai báo kích thước cửa sổ/mặt phẳng hiển thị
size = width, height = 740, 480
screen = pygame.display.set_mode(size)

# tải hình ảnh mới từ tệp và convert()
# sẽ tạo một bản sao hình ảnh trên surface
img = pygame.image.load("char.png").convert()

# khai báo giá trị cho các biến
clicking = False
right_clicking = False
middle_click = False

while True:
    mx, my = pygame.mouse.get_pos()  # lấy tọa độ x, y của chuột
    location = [mx, my]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
          
            # pygame.QUIT để tắt pygame
            exit()
            # exit() là hàm của sys để thoát khỏi chương trình

    # Sự kiện MOUSEBUTTONDOWN được kích hoạt khi một nút chuột được nhấn
    if event.type == MOUSEBUTTONDOWN:
      
        # trả về true khi nút chuột trái được nhấn
        if event.button == 1:  
            clicking = True
            
            # khai báo tệp hình ảnh mới để cập nhật hình ảnh
            # mỗi khi nhấn chuột trái
            img = pygame.image.load("char1.png")
            pygame.display.update()  # cập nhật hình ảnh
        
        # trả về true khi nút chuột phải được nhấn
        if event.button == 3:  
            right_clicking = True
            
            # khai báo tệp hình ảnh mới để cập nhật hình ảnh
            # mỗi khi nhấn chuột phải
            img = pygame.image.load("char.png")
            pygame.display.update()  # cập nhật hình ảnh
            
        # trả về true khi nhấn nút chuột giữa
        if event.button == 2:  
            middle_click = middle_click  # (lỗi logic, dòng này không có tác dụng)
            
            # thay đổi kích thước hình ảnh khi nhấn chuột giữa
            img = pygame.transform.scale(img, (100, 100))
            pygame.display.update()  # cập nhật hình ảnh

    # MOUSEBUTTONUP được kích hoạt khi nhả nút chuột
    if event.type == MOUSEBUTTONUP:
        if event.button == 1:
            clicking = False

    screen.fill((255, 255, 255))
    
    # hàm này sẽ tô nền bằng màu trắng
    screen.blit(img, (location[0], location[1]))
    
    # hàm blit() sẽ sao chép hình ảnh đến vị trí tọa độ x, y
    pygame.display.update()
    # vẽ các đối tượng lên màn hình

Đầu ra:

Published on Jul 28, 2025

Related Posts