Cách di chuyển kẻ thù theo những cách khác nhau bằng PyGame

Một trong những yếu tố quan trọng của một trò chơi điện tử tuyệt vời là sự hiện diện của kẻ thù. Dù là thây ma, người ngoài hành tinh hay những người chơi khác, kẻ thù đều có thể khiến trò chơi trở nên thử thách và thú vị hơn.
Trong PyGame, bạn có thể dễ dàng lập trình nhiều hành vi di chuyển của kẻ thù, chẳng hạn như đi theo người chơi, di chuyển ngẫu nhiên hoặc đi theo những con đường cụ thể.
Mục Lục
Tạo một trò chơi đơn giản
Bắt đầu bằng cách tạo một trò chơi đơn giản trong đó người chơi sẽ di chuyển theo chiều ngang và chiều dọc. Nếu người chơi chạm vào kẻ thù, người chơi sẽ chết.
Bắt đầu bằng cách nhập mô-đun PyGame cần thiết và khởi tạo nó.
import pygamepygame.init()
Tiếp theo, thiết lập màn hình và tạo đối tượng người chơi và kẻ thù bằng cách sử dụng pygame.Rect() chức năng.
screen = pygame.display.set_mode((800, 600))
black = (0, 0, 0)
white = (255, 255, 255)
player = pygame.Rect(350, 500, 50, 50)
enemy = pygame.Rect(350, 0, 50, 50)
Sau đó, tạo một vòng lặp trò chơi chạy cho đến khi người chơi va chạm với kẻ thù hoặc thoát khỏi trò chơi. Ngoài ra, hãy kiểm tra va chạm giữa người chơi và kẻ thù và vẽ các đối tượng trò chơi trên màn hình.
running = Truewhile running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(white)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
if player.colliderect(enemy):
running = False
pygame.draw.rect(screen, black, player)
pygame.draw.rect(screen, black, enemy)
pygame.display.update()
pygame.quit()
Kẻ thù trực tiếp đối với người chơi
Để di chuyển kẻ thù về phía người chơi, bạn cần tính toán khoảng cách giữa hai người, điều này bạn có thể thực hiện bằng cách sử dụng định lý Pythagore. Sau đó, bạn có thể sử dụng khoảng cách này để xác định tốc độ di chuyển của kẻ thù và hướng về phía người chơi.
Để thực hiện điều này, hãy tạo một biến tốc độ và sử dụng nó để cập nhật vị trí của kẻ thù đối với người chơi.
distance_x = player.x - enemy.x
distance_y = player.y - enemy.y
distance = (distance_x ** 2 + distance_y ** 2) ** 0.5
speed = 2
if distance != 0:
enemy.x += speed * distance_x / distance
enemy.y += speed * distance_y / distance
Ngẫu nhiên chuyển động của kẻ thù trên màn hình
Bạn cũng có thể khiến kẻ thù di chuyển ngẫu nhiên trên màn hình để trò chơi trở nên thử thách hơn.
Để làm điều này, hãy tạo một hướng ngẫu nhiên để kẻ thù di chuyển bằng cách sử dụng mô-đun ngẫu nhiên trong Python. Sử dụng sự lựa chọn() chức năng chọn một hướng ngẫu nhiên từ danh sách các hướng mà kẻ thù có thể di chuyển đến. Sau đó, cập nhật vị trí của kẻ thù dựa trên hướng đã chọn.
import random
direction = random.choice(['left', 'right', 'up', 'down'])
if direction == 'left':
enemy.x -= 5
elif direction == 'right':
enemy.x += 5
elif direction == 'up':
enemy.y -= 5
elif direction == 'down':
enemy.y += 5
Phong trào kẻ thù dựa trên vùng lân cận
Trong một số trò chơi, kẻ thù chỉ di chuyển khi người chơi ở gần chúng. Bạn có thể đạt được điều này bằng cách tính toán khoảng cách giữa kẻ thù và người chơi.
Nếu khoảng cách nhỏ hơn một giá trị nhất định, hãy khiến kẻ thù di chuyển về phía người chơi. Điều này làm cho trò chơi trở nên chiến lược hơn và buộc người chơi phải cẩn thận hơn trong các chuyển động của họ.
speed = 2if distance < 300:
if distance != 0:
enemy.x += speed * distance_x / distance
enemy.y += speed * distance_y / distance
Kẻ thù trốn tránh các cuộc tấn công của người chơi
Bạn cũng có thể khiến kẻ thù né tránh chuyển động của người chơi. Kẻ thù sẽ cố gắng tránh người chơi bằng cách di chuyển vuông góc với vị trí của người chơi.
Để đạt được điều này, hãy tính vectơ đơn vị về phía người chơi bằng cách sử dụng distance_x và distance_y đã tính trước đó. Sau đó, tính vectơ vuông góc để di chuyển kẻ thù vuông góc với vectơ đơn vị. Cuối cùng, tính tích vô hướng của vectơ vuông góc và vectơ đơn vị để xác định hướng di chuyển của kẻ thù.
Để thực hiện điều này, hãy thêm đoạn mã bên dưới vào sau phép tính khoảng cách.
speed = 2if distance < 400:
if distance != 0:
unit_vector_x = distance_x / distance
unit_vector_y = distance_y / distance
perpendicular_vector_x = -unit_vector_y
perpendicular_vector_y = unit_vector_x
dot_product = perpendicular_vector_x * unit_vector_x
+ perpendicular_vector_y * unit_vector_y
if dot_product > 0:
enemy.x += speed * perpendicular_vector_x
enemy.y += speed * perpendicular_vector_y
else:
enemy.x -= speed * perpendicular_vector_x
enemy.y -= speed * perpendicular_vector_y
Với những sửa đổi này, kẻ thù sẽ cố gắng tránh đến quá gần người chơi. Điều này làm cho trò chơi trở nên thử thách và thú vị hơn khi chơi.
Bạn cũng có thể thêm nhiều tính năng hơn vào trò chơi của mình để khiến trò chơi trở nên thử thách hơn. Ví dụ: bạn có thể thêm nhiều kẻ thù di chuyển ngẫu nhiên trên màn hình, chướng ngại vật mà người chơi cần tránh khi di chuyển, tăng sức mạnh giúp nâng cao khả năng của người chơi, v.v.
Bạn có thể sử dụng mô-đun Đồng hồ để đặt tốc độ khung hình của trò chơi và giúp trò chơi chạy mượt mà hơn. Dưới đây là việc thực hiện:
enemies = []for i in range(5):
enemy = pygame.Rect(random.randint(0, 750), random.randint(0, 550), 50,
50)
enemies.append(enemy)
obstacle = pygame.Rect(200, 250, 50, 50)
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(white)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
for enemy in enemies:
direction = random.choice(['left', 'right', 'up', 'down'])
if direction == 'left':
enemy.x -= 5
elif direction == 'right':
enemy.x += 5
elif direction == 'up':
enemy.y -= 5
elif direction == 'down':
enemy.y += 5
if player.colliderect(enemy):
running = False
pygame.draw.rect(screen, black, player)
for enemy in enemies:
pygame.draw.rect(screen, black, enemy)
pygame.draw.rect(screen, black, obstacle)
pygame.display.update()
clock.tick(60)
pygame.quit()
Nâng cao trải nghiệm chơi trò chơi của bạn với kẻ thù
Bằng cách thêm kẻ thù có chuyển động, hành vi và khả năng độc đáo, bạn có thể khiến trò chơi của mình trở nên hấp dẫn và thử thách hơn đối với người chơi. Người chơi sẽ cần lập chiến lược và điều chỉnh lối chơi của mình để vượt qua các loại kẻ thù khác nhau. Điều này có thể tăng mức độ tương tác, cải thiện giá trị chơi lại và giữ chân người chơi quay lại để biết thêm.