Đố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.
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:
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ả:
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.