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

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

enemy movements in 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ể.


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 pygame

pygame.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 = 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

    
    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 = 2

if 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 = 2

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

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *