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
Trong bài viết này, chúng ta sẽ thảo luận về cách chuyển đổi hình ảnh (thay đổi tỷ lệ và xoay hình ảnh) bằng chuột trong Pygame.
Bước 1: Đầu tiên, nhập thư viện Pygame và math.
import pygame
import math
from pygame.locals import *
Bước 2: Bây giờ, hãy lấy màu sắc làm dữ liệu đầu vào mà chúng ta muốn sử dụng trong trò chơi.
color_1 = #RGB value of color 1
color_2 = #RGB value of color 2
color_n = #RGB value of color n
Bước 3: Sau đó, khởi tạo hàm tạo
pygame.init()
Bước 4: Thiết lập kích thước cho trò chơi GUI của bạn.
w, h = #Width dimension, #Height dimension
screen = pygame.display.set_mode((w, h))
Bước 5: Thiết lập giá trị chạy để chạy trò chơi, góc mà trò chơi có thể di chuyển.
running = True
angle = 0
scale = 1
Bước 6: Tiếp theo, lấy hình ảnh làm đầu vào mà chúng ta muốn di chuyển bằng chuột
img_logo = pygame.image.load('#Enter the image url')
img_logo.convert()
Bước 7: Vẽ đường viền xung quanh hình ảnh.
rect_logo = img_logo.get_rect()
pygame.draw.rect(img_logo, color_1, rect_logo, 1)
Bước 8: Xác định vị trí trung tâm của trò chơi GUI và vị trí của chuột.
center = w//2, h//2
mouse = pygame.mouse.get_pos()
Bước 9: Lưu trữ hình ảnh trong một biến mới và tạo một hình chữ nhật xung quanh hình ảnh.
img = img_logo
rect = img.get_rect()
rect.center = center
Bước 10: Thiết lập những việc bạn muốn ứng dụng thực hiện khi ở trạng thái chạy.
while running:
for event in pygame.event.get():
Bước 10.1: Khi ứng dụng đang chạy, hãy thoát ứng dụng nếu người dùng muốn thoát.
if event.type == QUIT:
running = False
Bước 10.2: Trong trường hợp người dùng không muốn thoát, hãy thiết lập góc xoay của hình ảnh.
if event.type == KEYDOWN:
if event.key == K_ra:
if event.mod & KMOD_SHIFT:
# angle at which it should move left
angle -=
else:
# angle at which it should move right
angle +=
Bước 10.3: Ngoài ra, hãy thiết lập tỷ lệ kích thước hình ảnh sẽ giảm hoặc tăng.
elif event.key == K_sa:
if event.mod & KMOD_SHIFT:
scale /= #scale at which the image size should decrease
else:
scale *= #scale at which the image size should increase
Bước 10.4: Thiết lập tọa độ, góc và tỷ lệ để hình ảnh sẽ xoay hoặc thay đổi kích thước.
elif event.type == MOUSEMOTION:
Bước 10.4.1: Lưu trữ vị trí hiện tại của sự kiện trong biến mới.
mouse = event.pos
Bước 10.4.2: Xác định tọa độ Descartes bằng cách sử dụng biến chuột và tâm của hình ảnh để xoay hình ảnh.
x = mouse[0] - center[0]
y = mouse[1] - center[1]
Bước 10.4.3: Tiếp theo, tính khoảng cách giữa hai điểm (0,0) và (x, y) bằng công thức √x 2 +y 2
d = math.sqrt(x ** 2 + y ** 2)
Bước 10.4.4: Bây giờ, hãy tính góc theo độ mà hình ảnh sẽ xoay bằng phương thức Python math.atan2() trả về arctangent của y/x, tính bằng radian.
angle = math.degrees(-math.atan2(y, x))
Bước 10.4.5: Tính toán kích thước hình ảnh nên giảm hay tăng theo tỷ lệ nào bằng hàm abs , hàm này trả về độ lớn của số.
scale = abs(5 * d / w)
Bước 10.4.6: Tính toán vị trí cập nhật của hình ảnh ở trạng thái chạy bằng hàm rotozoom, là phép biến đổi tỷ lệ và xoay kết hợp.
img = pygame.transform.rotozoom(img_logo, angle, scale)
Bước 10.4.7: Xây dựng hình chữ nhật xung quanh hình ảnh đã cập nhật
rect = img.get_rect()
rect.center = center
Bước 11: Tiếp theo, bạn cần thiết lập màu màn hình và hình ảnh trên màn hình.
screen.fill(color_3)
screen.blit(img, rect)
SBước 12: Sau đó, vẽ hình chữ nhật , đường thẳng và hình tròn để giúp di chuyển hình ảnh.
pygame.draw.rect(screen, color_2, rect, #thickness of rectangle)
pygame.draw.line(screen, color_3, center, mouse, #Thickness of line)
pygame.draw.circle(screen, color_1, center, #radius of circle, #thickness of circumference)
pygame.draw.circle(screen, color_2, mouse, #radius of circle, #thickness of circumference)
Bước 13: Ngoài ra, hãy cập nhật những thay đổi đã thực hiện trong trò chơi GUI.
pygame.display.update()
Bước 14: Cuối cùng, thoát khỏi trò chơi GUI.
pygame.quit()
Dưới đây là cách thực hiện.
# Chương trình Python để biến đổi hình ảnh bằng chuột
# Import các thư viện pygame và math
import pygame
import math
from pygame.locals import *
# Khai báo các màu sử dụng
RED = (255, 0, 0)
BLACK = (0, 0, 0)
YELLOW = (255, 255, 0)
# Khởi tạo giao diện trò chơi
pygame.init()
# Cài đặt kích thước cửa sổ
w, h = 600, 440
screen = pygame.display.set_mode((w, h))
# Khởi tạo trạng thái ban đầu
running = True
angle = 0 # góc xoay ban đầu
scale = 1 # tỉ lệ phóng to/thu nhỏ ban đầu
# Tải ảnh từ file
img_logo = pygame.image.load('gfg_image.jpg')
img_logo.convert()
# Vẽ khung viền đỏ quanh hình ảnh
rect_logo = img_logo.get_rect()
pygame.draw.rect(img_logo, RED, rect_logo, 1)
# Xác định vị trí trung tâm và lấy tọa độ chuột
center = w // 2, h // 2
mouse = pygame.mouse.get_pos()
# Lưu ảnh gốc vào biến mới và tạo khung bao quanh ảnh
img = img_logo
rect = img.get_rect()
rect.center = center
# Vòng lặp game chính
while running:
for event in pygame.event.get():
# Thoát khỏi game khi người dùng bấm nút đóng
if event.type == QUIT:
running = False
# Xử lý sự kiện nhấn phím
if event.type == KEYDOWN:
# Nếu nhấn phím 'ra' để thay đổi góc quay ảnh
if event.key == K_ra:
if event.mod & KMOD_SHIFT:
angle -= 5
else:
angle += 5
# Nếu nhấn phím 'sa' để thay đổi tỉ lệ ảnh
elif event.key == K_sa:
if event.mod & KMOD_SHIFT:
scale /= 1.5
else:
scale *= 1.5
# Khi di chuyển chuột, tính toán lại góc và tỉ lệ để biến đổi ảnh
elif event.type == MOUSEMOTION:
mouse = event.pos
x = mouse[0] - center[0]
y = mouse[1] - center[1]
d = math.sqrt(x ** 2 + y ** 2)
angle = math.degrees(-math.atan2(y, x)) # Tính góc xoay từ tâm đến chuột
scale = abs(5 * d / w) # Tính tỉ lệ dựa trên khoảng cách từ tâm đến chuột
img = pygame.transform.rotozoom(img_logo, angle, scale) # Xoay và phóng ảnh
rect = img.get_rect()
rect.center = center
# Đặt màu nền và vẽ ảnh đã biến đổi
screen.fill(YELLOW)
screen.blit(img, rect)
# Vẽ các hình hỗ trợ trực quan: khung ảnh, đường thẳng, tâm, vị trí chuột
pygame.draw.rect(screen, BLACK, rect, 3)
pygame.draw.line(screen, RED, center, mouse, 2)
pygame.draw.circle(screen, RED, center, 6, 1)
pygame.draw.circle(screen, BLACK, mouse, 6, 2)
# Cập nhật cửa sổ game
pygame.display.update()
# Thoát khỏi game
pygame.quit()
Đầ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,....