Xử lý xung đột trong game bằng thư viện arcade của Python

Xung đột là khía cạnh cơ bản của gameplay ở nhiều thể loại video game. Chúng tăng thêm thử thách và độ thú vị cho trò chơi, yêu cầu người chơi di chuyển chướng ngại vật, tránh kẻ thù và thu thập phần thưởng.

Phát triển game

Việc triển khai tính năng phát hiện và xử lý xung đột trong game quan trọng đối với việc tạo những cơ chế gameplay thực tế và năng động, khiến người chơi luôn thấy hào hứng. Bạn có thể dễ dàng phát hiện các xung đột bằng các hàm có sẵn trong thư viện arcade của Python.

Tạo 1 game đơn giản

Trước khi bắt đầu, đảm bảo bạn đã cài pip trên thiết bị. Dùng lệnh này để cài thư viện arcade:

pip install arcade

Sau đó, tạo một game mà người chơi có thể di chuyển sang trái và phải để tránh va chạm với một kẻ thù hình chữ nhật. Bạn có thể dùng hàm vẽ nhân vật có sẵn.

Đây là code cho game ví dụ ở bài viết:

import arcade

SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "My Game")
        arcade.set_background_color(arcade.color.WHITE)
        self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
        self.player.center_x = SCREEN_WIDTH // 3
        self.player.center_y = 50
        self.enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
        self.enemy.center_x = SCREEN_WIDTH // 2
        self.enemy.center_y = 50

    def on_draw(self):
        arcade.start_render()
        self.player.draw()
        self.enemy.draw()

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player.center_x -= MOVEMENT_SPEED
        elif key == arcade.key.RIGHT:
            self.player.center_x += MOVEMENT_SPEED

    def update(self, delta_time):
        if arcade.check_for_collision(self.player, self.enemy):
            print("Game Over")

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

if __name__ == "__main__":
    main()

Tính năng phát hiện va chạm của Arcade

Thư viện Arcade cung cấp cách đơn giản để phát hiện xung đột giữa các nhân vật. Hàm check_for_collision lấy hai sprite làm đối số và trả về giá trị Boolean cho biết các sprite có xung đột với nhau hay không. Bạn có thể dùng hàm này để phát hiện va chạm giữa người chơi và kẻ thù trong game.

Bạn có thể thay đổi phương thức update để kiểm tra các va chạm giữa người chơi và kẻ thù. Nếu thư viện phát hiện xung dột, bạn có thể hiện Game Over trên console.

Đây là code được cập nhật:

def update(self, delta_time):
    if arcade.check_for_collision(self.player, self.enemy):
        print("Game Over")
    else:
        self.player.update()

Với thay đổi này, game của bạn sẽ phát hiện va chạm và hiện nội dung Game Over nếu người chơi đụng độ kẻ thù.

Thêm nhiều tính năng hơn

Để làm game hấp dẫn hơn, bạn có thể thêm tính năng như ghi điểm, tăng sức mạnh và nhiều kẻ thù.

Ví dụ, bạn có thể tạo một danh sách kẻ thù và update game để sinh kẻ thù mới ở vị trí ngẫu nhiên sau mỗi va chạm. Bạn có thẻ di chuyển người chơi sang trái và phải để tránh kẻ thù & ghi điểm. Đây là ví dụ mà bạn có thể triển khai những tính năng này:

import random
class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "My Game")
        arcade.set_background_color(arcade.color.WHITE)
        self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
        self.player.center_x = SCREEN_WIDTH // 2
        self.player.center_y = 50
        self.enemies = arcade.SpriteList()
        self.score = 0
        for i in range(3):
            enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
            enemy.center_x = random.randint(0, SCREEN_WIDTH)
            enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
            self.enemies.append(enemy)

    def on_draw(self):
        arcade.start_render()
        self.player.draw()
        self.enemies.draw()
        arcade.draw_text(f"Score: {self.score}", 10, SCREEN_HEIGHT - 30, arcade.color.BLACK, 16)

    def update(self, delta_time):
        if arcade.check_for_collision_with_list(self.player, self.enemies):
            print("Game Over")
            arcade.close_window()
        else:
            self.player.update()
            for enemy in self.enemies:
                enemy.center_y -= MOVEMENT_SPEED / 2
                if enemy.center_y < 0:
                    enemy.center_x = random.randint(0, SCREEN_WIDTH)
                    enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
                    self.score += 1

Với những thay đổi trên, game giờ có nhiều kẻ thù xuất hiện ở vị trí ngẫu nhiên và di chuyển xuống dưới. Người chơi kiếm điểm cho mỗi lần tránh kẻ thù thành công. Game kết thúc nếu người chơi va chạm với kẻ thù bất kỳ.

Trên đây là cách xử lý xung đột hay va chạm trong game bằng thư viện Arcade của Python. Hi vọng bài viết hữu ích với các bạn.

Thứ Tư, 03/05/2023 12:58
31 👨 188
0 Bình luận
Sắp xếp theo
    ❖ Python