Cách thêm đối tượng di chuyển ngẫu nhiên trong Pygame

Đối tượng di chuyển ngẫu nhiên khiến game trở nên thú vị và thử thách hơn. Dưới đây là cách đưa nó vào trong các dự án Pygame.

Đối tượng di chuyển ngẫu nhiên

Pygame, một thư viện Python phổ biến để phát triển game, cho phép bạn tạo các trò chơi tương tác thú vị dễ dàng. Một cách để nâng cao tác phẩm sáng tạo trong Pygame là thêm đối tượng di chuyển ngẫu nhiên. Chúng có thể là vật cản, kẻ thù, bổ trợ sức mạnh hay bật ký thứ gì thêm tính năng động cho thế giới game của bạn.

Tạo một game đơn giản

Bắt đầu bằng cách thiết lập một cửa sổ Pygame cơ bản và thêm đối tượng người chơi cùng một số nền tảng. Bạn cũng có thể triển khai chuyển động người chơi cơ bản bằng phím mũi tên hoặc các đầu vào cảm ứng.

Tạo một file mới tên simple-game.py và thêm code cho game cơ bản của bạn:

Tạo game đơn giản

Thêm nhiều đối tượng di chuyển

Giờ bạn đã có một game đơn giản với đối tượng người chơi và nền tảng, thêm nhiều đối tượng di chuyển ngẫu nhiên cho game. Những đối tượng này sẽ di chuyển theo chiều dọc trên màn hình với tốc độ khác nhau.

object_width, object_height = 30, 30
object_speed_range = (2, 7)
objects = []

def create_random_object():
    return {
        'x': random.randint(0, screen_width - object_width),
        'y': random.randint(0, screen_height - object_height),
        'speed': random.randint(*object_speed_range)
    }

for _ in range(5): 
    objects.append(create_random_object())

def draw_object(obj):
    obj_dim = (obj['x'], obj['y'], object_width, object_height)
    pygame.draw.rect(screen, WHITE, obj_dim)

# Game loop
while running:
    screen.fill((0, 0, 0))

    # ... (previous code)

    for obj in objects:
        obj['x'] += obj['speed']
        if obj['x'] > screen_width:
            obj['x'] = -object_width

        draw_object(obj)

    pygame.display.update()
    clock.tick(60)

pygame.quit()

Kết quả:

Thêm nhiều đối tượng di chuyển

Triển khai thuật toán di chuyển ngẫu nhiên

Hiện tại, các đối tượng di chuyển ngẫu nhiên chỉ theo một đường thẳng nằm ngang. Để chuyển động của chúng khó dự đoán hơn, hãy thêm thuật toán chuyển động ngẫu nhiên sau:

# Thuật toán di chuyển ngẫu nhiên
def update_random_movement(obj):
    # Change the direction randomly
    if random.random() < 0.01: 
        obj['speed'] = -obj['speed']

# Game loop
while running:
    # ... (previous code)

    for obj in objects:
        obj['x'] += obj['speed']
        if obj['x'] > screen_width:
            obj['x'] = -object_width

        update_random_movement(obj)
        draw_object(obj)

    pygame.display.update()
    clock.tick(60)

pygame.quit()

Tạo đối tượng di chuyển về phía người chơi

Để thêm độ phức tạp cho game, bạn có thể giới thiệu một số đối tượng di chuyển về phía người chơi. Bạn có thể đạt được điều này bằng cách tính toán góc giữa đối tượng và người chơi, đồng thời, điều chỉnh vị trí tương ứng của đối tượng.

import math

# Đối tượng di chuyển hướng về người chơi
def move_towards_player(obj):
    player_center_x = player_x + player_width // 2
    player_center_y = player_y + player_height // 2
    object_center_x = obj['x'] + object_width // 2
    object_center_y = obj['y'] + object_height // 2

    angle1 = player_center_y - object_center_y
    angle2 = player_center_x - object_center_x

    angle = math.atan2(angle1, angle2)
    obj['x'] += obj['speed'] * math.cos(angle)
    obj['y'] += obj['speed'] * math.sin(angle)

# Game loop
while running:
    # ... (previous code)

    for obj in objects:
        obj['x'] += obj['speed']
        if obj['x'] > screen_width:
            obj['x'] = -object_width

        move_towards_player(obj)
        draw_object(obj)

    pygame.display.update()
    clock.tick(60)

pygame.quit()

Tạo đối tượng chỉ di chuyển khi người chơi bước vào môi trường xung quanh

Thay vì để tất cả đối tượng di chuyển ngay từ đầu, bạn có thể cho phép đối tượng bắt đầu chỉ di chuyển khi người chơi vào môi trường xung quanh.

# Đối tượng bắt đầu di chuyển khi người chơi bước vào môi trường xung quanh
surrounding_distance = 150

def should_start_moving(obj):
    surrounded1 = abs(obj['x'] - player_x) < surrounding_distance
    surrounded2 = abs(obj['y'] - player_y) < surrounding_distance
    return surrounded1 or surrounded2

# Game loop
while running:
    # ... (previous code)

    for obj in objects:
        if should_start_moving(obj):
            obj['x'] += obj['speed']
            if obj['x'] > screen_width:
                obj['x'] = -object_width

            update_random_movement(obj)
            move_towards_player(obj)

        draw_object(obj)

    pygame.display.update()
    clock.tick(60)

pygame.quit()

Phát hiện va chạm và tương tác

Để làm game hấp dẫn hơn, bạn có thể thêm phát hiện va chạm giữa người chơi và đối tượng di chuyển. Ví dụ, bạn có thể loại bỏ một đối tượng từ màn hình khi người chơi va chạm với nó.

# Phát hiện va chạm và tương tác
def is_collision(obj):

    condition1 = player_x + player_width > obj['x']
    condition2 = player_x < obj['x'] + object_width
    condition3 = player_y + player_height > obj['y']
    condition4 = player_y < obj['y'] + object_height
    return ( condition1 and condition2 and condition3 and condition4)

# Game loop
while running:
    # ... (previous code)

    for obj in objects:
        if should_start_moving(obj):
            obj['x'] += obj['speed']
            if obj['x'] > screen_width:
                obj['x'] = -object_width

            update_random_movement(obj)
            move_towards_player(obj)

            if is_collision(obj):
                objects.remove(obj)

        draw_object(obj)

    pygame.display.update()
    clock.tick(60)

pygame.quit()

Trên đây là cách tạo đối tượng di chuyển ngẫu nhiên trong Pygame. Hi vọng bài viết hữu ích với các bạn.

Thứ Hai, 14/08/2023 17:27
53 👨 267
0 Bình luận
Sắp xếp theo
    ❖ Python