/ / Cách thêm đối tượng chuyển động ngẫu nhiên bằng thư viện Arcade của Python

Cách thêm đối tượng chuyển động ngẫu nhiên bằng thư viện Arcade của Python

Các đối tượng chuyển động ngẫu nhiên có thể mang lại sự phấn khích và khó đoán cho trò chơi. Nó làm cho chúng trở nên hấp dẫn và thử thách hơn cho người chơi. Thư viện Arcade của Python cung cấp một cách đơn giản và hiệu quả để kết hợp các đối tượng chuyển động ngẫu nhiên vào trò chơi của bạn.



Tạo một trò chơi đơn giản

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình. Sử dụng lệnh này để cài đặt giải trí thư viện:

 pip install arcade 

Sau đó, tạo một cửa sổ bằng cách sử dụng arcade.Window class và đặt màu nền thành màu trắng.

Mã được sử dụng trong bài viết này có sẵn trong kho lưu trữ GitHub này và bạn được sử dụng miễn phí theo giấy phép MIT.

Đặt vị trí của người chơi ở giữa màn hình theo chiều ngang và thêm một khoảng cách nhỏ từ trên xuống. Bạn có thể điều khiển chuyển động của người chơi bằng các phím mũi tên.

Đây là mã cho trò chơi cơ bản của chúng tôi:

 import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        arcade.set_background_color(arcade.color.WHITE)

        self.player_x = SCREEN_WIDTH // 2
        self.player_y = PLAYER_RADIUS + 10

    def on_draw(self):
        arcade.start_render()
        arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color.BLUE)

    def update(self, delta_time):
        pass

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 5
        elif key == arcade.key.RIGHT:
            self.player_x += 5

if __name__ == "__main__":
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

Thêm nhiều đối tượng

Để thêm các đối tượng chuyển động ngẫu nhiên vào trò chơi của bạn, hãy tạo một danh sách để lưu trữ các vị trí của đối tượng và cập nhật chúng trong mỗi khung hình. Bạn cũng có thể sử dụng sprite làm đối tượng.

Trong mã trò chơi của bạn, hãy thêm một danh sách có tên các đối tượng để lưu trữ vị trí của các đối tượng chuyển động ngẫu nhiên. Sau đó, tạo số lượng đối tượng (NUM_ĐỐI TƯỢNG) với tọa độ x và y ngẫu nhiên trong ranh giới màn hình. Các đối tượng được vẽ dưới dạng các vòng tròn màu đỏ bằng cách sử dụng arcade.draw_circle_fill chức năng.

 import arcade
import random

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
OBJECT_RADIUS = 10
NUM_OBJECTS = 10

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        arcade.set_background_color(arcade.color.WHITE)

        self.player_x = SCREEN_WIDTH // 2
        self.player_y = PLAYER_RADIUS + 10

        self.objects = []
        for _ in range(NUM_OBJECTS):
            x = random.randint(0, SCREEN_WIDTH)
            y = random.randint(0, SCREEN_HEIGHT)
            self.objects.append((x, y))

    def on_draw(self):
        arcade.start_render()
        arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color.BLUE)

        for obj in self.objects:
            x, y = obj
            arcade.draw_circle_filled(x, y, OBJECT_RADIUS, arcade.color.RED)

    def update(self, delta_time):
        pass

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 5
        elif key == arcade.key.RIGHT:
            self.player_x += 5

if __name__ == "__main__":
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

Dưới đây là đầu ra:

nhiều đối tượng được đặt ngẫu nhiên với người chơi trong arcade

Thực hiện thuật toán chuyển động ngẫu nhiên

Để làm cho các đối tượng di chuyển ngẫu nhiên, hãy cập nhật vị trí của chúng trong cập nhật phương pháp sử dụng một thuật toán chuyển động ngẫu nhiên.

Lặp lại qua từng đối tượng và tạo các giá trị ngẫu nhiên cho dxđê, đại diện cho sự thay đổi trong tọa độ x và y. Sau đó cập nhật vị trí của đối tượng bằng cách thêm các giá trị này. Đây là mã sửa đổi:

 def update(self, delta_time):
    for i in range(NUM_OBJECTS):
        x, y = self.objects[i]
        dx = random.randint(-5, 5)
        dy = random.randint(-5, 5)
        x += dx
        y += dy
        self.objects[i] = (x, y)

Dưới đây là đầu ra:

đối tượng di chuyển ngẫu nhiên với người chơi trong arcade

Đối tượng di chuyển về phía người chơi

Để thêm nhiều tương tác hơn, hãy làm cho các đố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 vectơ chỉ hướng giữa đối tượng và trình phát và điều chỉnh vị trí của đối tượng cho phù hợp.

Đối với điều này, hãy tính toán sự khác biệt về tọa độ x và y giữa đối tượng và trình phát. Bằng cách chuẩn hóa các giá trị này, bạn có được một vectơ chỉ hướng. Sau đó, nhân vectơ này với hệ số tốc độ (3 trong trường hợp này) và thêm nó vào vị trí của đối tượng. Đây là bản cập nhật cập nhật phương pháp:

 def update(self, delta_time):
    for i in range(NUM_OBJECTS):
        x, y = self.objects[i]
        dx = self.player_x - x
        dy = self.player_y - y
        distance = math.sqrt(dx ** 2 + dy ** 2)
        dx /= distance
        dy /= distance
        x += dx * 3
        y += dy * 3
        self.objects[i] = (x, y)

Dưới đây là đầu ra:

đối tượng di chuyển về phía người chơi trong arcade

Các đối tượng bắt đầu di chuyển khi người chơi bước vào khu vực xung quanh

Để thêm động lực hơn nữa, hãy sửa đổi mã để các đối tượng chỉ bắt đầu di chuyển khi người chơi đi vào khu vực xung quanh chúng. Thêm mã cho chuyển động của người chơi và xác định bán kính trong đó các đối tượng hoạt động.

 def update(self, delta_time):
    for i in range(NUM_OBJECTS):
        x, y = self.objects[i]
        dx = self.player_x - x
        dy = self.player_y - y
        distance = math.sqrt(dx ** 2 + dy ** 2)
        
        if distance < 100:
            dx /= distance
            dy /= distance
            x += dx * 3
            y += dy * 3
            self.objects[i] = (x, y)

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

Bây giờ, thêm tính năng phát hiện va chạm giữa người chơi và các đối tượng, đồng thời xác định hành vi khi xảy ra va chạm. Sửa đổi cập nhật phương pháp xử lý va chạm:

 def update(self, delta_time):
    for i in range(NUM_OBJECTS):
        x, y = self.objects[i]
        dx = self.player_x - x
        dy = self.player_y - y
        distance = math.sqrt(dx ** 2 + dy ** 2)
        
        if distance < PLAYER_RADIUS + OBJECT_RADIUS:
            
            self.objects.pop(i)
            self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
            
        elif distance < 100:
            dx /= distance
            dy /= distance
            x += dx * 3
            y += dy * 3
            self.objects[i] = (x, y)

Cân bằng ngẫu nhiên

Để tạo trải nghiệm chơi trò chơi cân bằng, điều quan trọng là tinh chỉnh chuyển động ngẫu nhiên và sinh sản của các đối tượng. Dưới đây là một vài ví dụ về cách bạn có thể điều chỉnh mã để đạt được sự cân bằng tốt hơn trong trò chơi của mình:

Giới hạn tốc độ tối đa

Để ngăn các đối tượng di chuyển quá nhanh, bạn có thể đưa ra giới hạn tốc độ tối đa. Sửa đổi cập nhật phương pháp bao gồm các ràng buộc tốc độ:

 def update(self, delta_time):
    for i in range(NUM_OBJECTS):
        x, y = self.objects[i]
        dx = self.player_x - x
        dy = self.player_y - y
        distance = math.sqrt(dx ** 2 + dy ** 2)

        if distance < PLAYER_RADIUS + OBJECT_RADIUS:
            self.objects.pop(i)
            self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
        elif distance < 100:
            dx /= distance
            dy /= distance

            speed = 3
            dx = min(max(dx * speed, -MAX_SPEED), MAX_SPEED)
            dy = min(max(dy * speed, -MAX_SPEED), MAX_SPEED)

            x += dx
            y += dy
            self.objects[i] = (x, y)

Kiểm soát tỷ lệ đẻ trứng

Bạn cũng có thể kiểm soát tốc độ các đối tượng mới xuất hiện trong trò chơi. Điều chỉnh mã để bao gồm độ trễ giữa các đối tượng mới sinh sản:

 import time

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        arcade.set_background_color(arcade.color.WHITE)

        self.player_x = SCREEN_WIDTH // 2
        self.player_y = PLAYER_RADIUS + 10

        self.objects = []
        self.last_spawn_time = time.time()

    def update(self, delta_time):
       
        if time.time() - self.last_spawn_time > SPAWN_DELAY:
            if len(self.objects) < MAX_OBJECTS:
                self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
                self.last_spawn_time = time.time()

        for i in range(len(self.objects)):
            x, y = self.objects[i]
            dx = self.player_x - x
            dy = self.player_y - y
            distance = math.sqrt(dx ** 2 + dy ** 2)

            if distance < PLAYER_RADIUS + OBJECT_RADIUS:
                self.objects.pop(i)
                self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
            elif distance < 100:
                dx /= distance
                dy /= distance

                x += dx * 3
                y += dy * 3
                self.objects[i] = (x, y)

Điều chỉnh SPAWN_DELAYMAX_ĐỐI TƯỢNG các giá trị để tìm sự cân bằng phù hợp cho trò chơi của bạn. Độ trễ dài hơn hoặc số lượng đối tượng tối đa nhỏ hơn sẽ khiến trò chơi bớt đông đúc hơn. Trong khi đó, độ trễ ngắn hơn hoặc mức tối đa lớn hơn sẽ làm tăng độ khó.

Làm cho trò chơi thú vị hơn bằng cách sử dụng các đối tượng chuyển động

Việc thêm các đối tượng chuyển động ngẫu nhiên vào trò chơi có thể nâng cao đáng kể trải nghiệm tổng thể. Chúng mang đến tính khó đoán và thử thách, khiến lối chơi trở nên hấp dẫn và năng động hơn. Người chơi sẽ phải thích nghi và phản ứng nhanh để tránh va chạm hoặc bắt đồ vật, và điều đó sẽ mang lại cảm giác phấn khích và thành tựu.

Similar Posts

Leave a Reply

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