Chào mừng các bạn đến với Rcom Dăm Yi blog - Kho tài liệu bổ ích!, Chúng tôi sẽ từng bước hoàn thiện để bạn đọc cảm thấy hài lòng, hữu ích!

Thứ Tư, 11 tháng 3, 2026

Lập Trình Game Python Với Pygame - Từ Zero Đến Hero

Lập Trình Game Với Pygame

Hành trình sáng tạo trò chơi từ những dòng mã đầu tiên

Kiến trúc cốt lõi của một trò chơi

Khác với ứng dụng văn phòng, Game chạy liên tục ở tốc độ cao. Cấu trúc gồm: Nhập liệu (Input) -> Cập nhật (Update) -> Hiển thị (Draw).

Các ví dụ thực hành chi tiết

Ví dụ 1 & 2: Cửa sổ và Vòng lặp Game

main.py
import pygame

# 1. Khởi tạo
pygame.init()
screen = pygame.display.set_mode((800, 600))
running = True

# 2. Vòng lặp Game
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    screen.fill((0, 0, 0)) # Xóa màn hình bằng màu đen
    pygame.display.update()

pygame.quit()
Giải thích:
  • pygame.init(): Đánh thức tất cả các module của Pygame.
  • pygame.event.get(): Lấy danh sách tất cả các thao tác (chuột, phím).
  • screen.fill(): Cực kỳ quan trọng để xóa các hình ảnh cũ trước khi vẽ hình mới.

Ví dụ 4: Di chuyển vật thể (Input Handling)

movement.py
x, y = 100, 100
vel = 5 # Vận tốc

# Trong vòng lặp while:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]: x -= vel
if keys[pygame.K_RIGHT]: x += vel
if keys[pygame.K_UP]: y -= vel
if keys[pygame.K_DOWN]: y += vel

pygame.draw.rect(screen, (255, 0, 0), (x, y, 50, 50))
Giải thích: Tọa độ trong Game có gốc (0,0) ở góc trên bên trái. Muốn đi xuống phải cộng y, muốn đi lên phải trừ y.

Ví dụ 6: Xử lý va chạm (Collision Detection)

collision.py
player_rect = pygame.Rect(x, y, 50, 50)
enemy_rect = pygame.Rect(400, 300, 50, 50)

if player_rect.colliderect(enemy_rect):
    print("Va chạm rồi!")
Giải thích: colliderect là hàm có sẵn cực mạnh của Pygame giúp kiểm tra xem hai hình chữ nhật có đè lên nhau hay không. Đây là nền tảng của các game bắn súng hoặc ăn xu.

Ví dụ 10: Giới hạn khung hình (FPS)

fps_control.py
clock = pygame.time.Clock()

while running:
    clock.tick(60) # Chạy đúng 60 khung hình/giây
    # ... logic game ...
Giải thích: Nếu không có clock.tick(60), game sẽ chạy nhanh hết mức có thể (tùy máy mạnh yếu), dẫn đến nhân vật di chuyển quá nhanh không thể kiểm soát.

Ví dụ 12: Màn hình Game Over (State Management)

game_state.py
game_active = True

while running:
    if game_active:
        # Chạy logic game
        if lives <= 0: game_active = False
    else:
        # Hiển thị màn hình Game Over
        screen.fill((200, 0, 0))
        show_text("NHẤN R ĐỂ CHƠI LẠI", 300, 300)
🎮 Thử thách cho học sinh: Hãy thử kết hợp Ví dụ 4 (Di chuyển) và Ví dụ 11 (Kẻ địch) để tạo ra một trò chơi né tránh chướng ngại vật đơn giản. Đây là bài tập thực hành tốt nhất để hiểu về logic Game!

Không có nhận xét nào:

Đăng nhận xét

Bài đăng phổ biến

💬 Bình luận

💬 Bình luận

📌 Danh sách bình luận