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