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ộ module Python được thiết kế để viết trò chơi điện tử. Nó bổ sung chức năng cho thư viện SDL tuyệt vời, cho phép bạn tạo ra các trò chơi và chương trình đa phương tiện đầy đủ tính năng bằng ngôn ngữ Python. Các lợi ích chính của nó bao gồm:
Thân thiện với người mới bắt đầu: Cú pháp Python đơn giản khiến nó trở nên lý tưởng cho người mới bắt đầu.
Cộng đồng tích cực: Giàu hướng dẫn, ví dụ và hỗ trợ toàn cầu.
Đa nền tảng: Hoạt động trên Windows, Mac và Linux.
Đa năng: Thích hợp cho trò chơi, mô phỏng và ứng dụng tương tác.
Miễn phí và mã nguồn mở: Không mất phí, không hạn chế.
Pygame yêu cầu Python 3.6.1 trở lên, vì các phiên bản mới hơn thân thiện hơn với người mới bắt đầu và mang lại hiệu suất tốt hơn. Nếu bạn chưa cài đặt Python, hãy tải xuống từ python.org.
Để cài đặt Pygame, hãy sử dụng lệnh sau:
python3 -m pip install -U pygame --user
Sau khi cài đặt, hãy kiểm tra xem nó có hoạt động không bằng cách chạy một ví dụ tích hợp:
python3 -m pygame.examples.aliens
Nếu trò chơi khởi chạy thành công, bạn đã sẵn sàng để bắt đầu sử dụng Pygame!
Sau khi Pygame được cài đặt, chúng ta hãy tạo một chương trình đơn giản hiển thị bốn hình vuông trên màn hình.
# Nhập mô-đun pygame
nhập khẩu pygame
# Nhập hằng số để dễ dàng truy cập vào các sự kiện quan trọng
từ pygame.locals nhập *
Trước khi sử dụng bất kỳ chức năng nào của Pygame, chúng ta cần nhập các mô-đun của chức năng đó.
Sprite: Một đối tượng 2D (giống như hình vuông của chúng ta) được hiển thị trên màn hình.
Bề mặt: Một tấm vải để vẽ (ngay cả màn hình cũng là một bề mặt).
Rect: Đối tượng hình chữ nhật dùng để định vị và va chạm.
import pygame
from pygame.locals import *
class Sq(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.surf = pygame.Surface((25, 25))
self.surf.fill((0, 200, 255))
pygame.init() # Init Pygame
win = pygame.display.set_mode((800, 600)) # Game window 800x600
# Create 4 squares
s1, s2, s3, s4 = Sq(), Sq(), Sq(), Sq()
# Game loop
run = True
while run:
for e in pygame.event.get():
if e.type == QUIT or (e.type == KEYDOWN and e.key == K_BACKSPACE):
run = False
# Draw squares in corners
win.blit(s1.surf, (40, 40))
win.blit(s2.surf, (40, 530))
win.blit(s3.surf, (730, 40))
win.blit(s4.surf, (730, 530))
pygame.display.flip()
Đầu ra:
Giải thích:
Lớp Sq tạo ra một sprite hình vuông màu xanh nhạt kích thước 25x25 trong Pygame bằng cách mở rộng pygame.sprite.Sprite , khởi tạo lớp cha và tô màu bề mặt (0, 200, 255).
pygame.event.get() xử lý tất cả các sự kiện đến. Nếu loại sự kiện là QUIT, trò chơi sẽ thoát khi nút đóng cửa sổ được nhấp. Tương tự, nếu sự kiện KEYDOWN xảy ra và phím Backspace được nhấn (ví dụ: key == pygame.K_BACKSPACE), trò chơi sẽ thoát.
win.blit(s1.surf, (40, 40)) vẽ ô vuông 1 ở góc trên bên trái, s2 ở góc dưới bên trái, s3 ở góc trên bên phải và s4 ở góc dưới bên phải.
pygame.display.flip() cập nhật màn hình để hiển thị các hình vuông đã vẽ.
Hãy cùng tạo một trò chơi đơn giản, thực tế, trong đó người chơi điều khiển một mái chèo để bắt các khối gỗ rơi xuống. Các tính năng của trò chơi bao gồm:
Di chuyển mái chèo sang trái/phải bằng các phím mũi tên.
Bắt các khối rơi xuống để kiếm điểm.
Trò chơi kết thúc nếu một khối chạm đất.
import pygame
import random
import sys
pygame.init() # Init pygame
W, H = 600, 600 # Screen setup
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("Catch the Falling Blocks")
WHT, BLU, RED, BLK = (255, 255, 255), (0, 200, 255), (255, 0, 0), (0, 0, 0) # Colors
# Clock and font
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 36)
# Paddle and block
paddle = pygame.Rect(W // 2 - 60, H - 20, 120, 10)
block = pygame.Rect(random.randint(0, W - 20), 0, 20, 20)
b_speed = 5
score = 0 # Score
# Game loop
run = True
while run:
screen.fill(BLK)
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Paddle movement
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and paddle.left > 0:
paddle.move_ip(-8, 0)
if keys[pygame.K_RIGHT] and paddle.right < W:
paddle.move_ip(8, 0)
# Move block
block.y += b_speed
# Block caught
if block.colliderect(paddle):
block.y = 0
block.x = random.randint(0, W - 20)
score += 1
b_speed += 0.5 # Speed up
# Block missed
if block.y > H:
game_over = font.render(f"Game Over! Final Score: {score}", True, RED)
screen.blit(game_over, (W // 2 - 150, H // 2))
pygame.display.flip()
pygame.time.wait(2000)
run = False
# Draw objects
pygame.draw.rect(screen, WHT, paddle)
pygame.draw.rect(screen, BLU, block)
# Display score
score_text = font.render(f"Score: {score}", True, WHT)
screen.blit(score_text, (10, 10))
pygame.display.flip()
clock.tick(60)
Đầu ra:
Giải thích:
pygame.Rect(...) được sử dụng để định nghĩa các hình chữ nhật như mái chèo và khối. Hai giá trị đầu tiên là vị trí trên cùng bên trái (x, y), theo sau là chiều rộng và chiều cao.
paddle.move_ip(x, y) di chuyển mái chèo tại chỗ theo các giá trị đã cho.
block.colliderect(paddle) kiểm tra va chạm giữa khối và mái chèo. Nếu đúng, khối sẽ được "bắt".
điểm & tốc độ b Điểm được tăng thêm 1 sau mỗi lần bắt bóng và tốc độ chặn tăng lên, khiến trò chơi ngày càng khó hơn.
pygame.display.flip() cập nhật toàn bộ màn hình với bất kỳ thay đổi nào được thực hiện, ví dụ như di chuyển mái chèo hoặc khối rơi.
clock.tick(60) giữ cho trò chơi chạy ở tốc độ 60 khung hình/giây để chuyển động mượt mà.
Published on Jul 25, 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,....