Trình trực quan hóa sắp xếp bong bóng sử dụng PyGame

Category: Pygame

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, chúng ta có thể thấy các thanh chưa được sắp xếp với các chiều cao khác nhau. Khi nhấn phím cách, nó bắt đầu được sắp xếp theo kiểu sắp xếp nổi bọt, nghĩa là sau mỗi lần lặp, phần tử có giá trị lớn nhất sẽ xuất hiện cuối cùng. Bubble Sort là một thuật toán đơn giản được sử dụng để sắp xếp một tập hợp n phần tử cho trước dưới dạng một mảng với n số phần tử. Bubble Sort so sánh tất cả các phần tử từng cái một và sắp xếp chúng dựa trên giá trị của chúng.

Các bước triển khai: 1. Tạo một cửa sổ chính 2. Tô màu đen cho cửa sổ chính 3. Tạo một phương thức để hiển thị danh sách các thanh với khoảng cách cụ thể giữa chúng 4. Nhận đầu vào phím từ người dùng 5. Nếu nhấn phím cách, bắt đầu quá trình sắp xếp 6. Triển khai thuật toán sắp xếp nổi bọt trên danh sách 7. Sau mỗi lần lặp lại bên trong, tô màu đen cho màn hình và gọi phương thức show để hiển thị danh sách đã lặp lại dưới dạng thanh.

Dưới đây là cách thực hiện 

# nhập pygame
import pygame

pygame.init()

# đặt kích thước cửa sổ
win = pygame.display.set_mode((500, 400))

# đặt tiêu đề cho cửa sổ
pygame.display.set_caption("Bubble sort")

# vị trí ban đầu
x = 40
y = 40

# chiều rộng của mỗi cột
width = 20

# chiều cao của mỗi cột (dữ liệu cần sắp xếp)
height = [200, 50, 130, 90, 250, 61, 110,
            88, 33, 80, 70, 159, 180, 20]

run = True

# hàm hiển thị danh sách chiều cao
def show(height):

    # vòng lặp duyệt qua từng phần tử trong danh sách
    for i in range(len(height)):

        # vẽ từng cột với khoảng cách tương ứng
        pygame.draw.rect(win, (255, 0, 0), (x + 30 * i, y, width, height[i]))

# vòng lặp vô hạn
while run:

    # cờ thực thi để bắt đầu sắp xếp
    execute = False

    # độ trễ thời gian
    pygame.time.delay(10)

    # lấy các phím được nhấn
    keys = pygame.key.get_pressed()

    # duyệt các sự kiện
    for event in pygame.event.get():

        # nếu sự kiện là thoát
        if event.type == pygame.QUIT:

            # đặt run = False để thoát khỏi vòng lặp while
            run = False

    # nếu phím cách được nhấn
    if keys[pygame.K_SPACE]:
        # đặt cờ thực thi thành True
        execute = True

    # kiểm tra nếu cờ thực thi là False
    if execute == False:

        # tô màu đen cho cửa sổ
        win.fill((0, 0, 0))

        # gọi hàm hiển thị danh sách các phần tử
        show(height)

        # cập nhật cửa sổ
        pygame.display.update()

    # nếu cờ thực thi là True
    else:

        # bắt đầu sắp xếp theo thuật toán bubble sort
        for i in range(len(height) - 1):

            # sau mỗi vòng lặp, phần tử lớn nhất sẽ được đẩy về cuối
            for j in range(len(height) - i - 1):

                # nếu phần tử hiện tại lớn hơn phần tử kế tiếp
                if height[j] > height[j + 1]:

                    # lưu vào biến tạm
                    # và hoán đổi hai phần tử
                    t = height[j]
                    height[j] = height[j + 1]
                    height[j + 1] = t

                # tô màu đen cho cửa sổ
                win.fill((0, 0, 0))

                # gọi hàm show để hiển thị danh sách
                show(height)

                # tạo độ trễ thời gian
                pygame.time.delay(50)

                # cập nhật hiển thị
                pygame.display.update()

# thoát khỏi cửa sổ chính
pygame.quit()

Đầu ra:

Published on Jul 28, 2025

Related Posts

Trò chơi 8-bit sử dụng pygame

Pygame là một thư viện Python chuyên dụng để thiết kế và xây dựng trò chơi. Pygame chỉ hỗ trợ các trò chơi 2D được xây dựng bằng các sprite khác nhau....

Pygame