Giới thiệu về pygame

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

Cài đặt Pygame

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!

Tạo chương trình pygame đầu tiên của bạn

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 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 đó.

Hiểu các khái niệm chính của pygame

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

Mã triển khai:

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

Trò chơi nhỏ bắt khối rơi

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:

Đầ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

Related Posts